如何使用Java Spring Boot更新MognoDB中的数组字段?

问题描述 投票:0回答:1

如果要扫描qr代码,我想将Scan更新为true,但查询有问题。

@GetMapping("/scannQr/{audienceId}/{eventName}/{Date}")

public ResponseBody scannQr(@PathVariable String audienceId , @PathVariable String eventName , @PathVariable String Date) {
    Map<String, Object> result = new HashMap<>();
    Update update = new Update();
    Audience audience  = audienceRepository.findByAudienceIdAndEventName(audienceId, eventName);
    //check Audience if his name in database
    if(audience == null) {
        result.put("Sorry Can`t found Audience", audience);
        return new ResponseBody("failed",null);
    }
    for(int count = 0 ; count<audience.getQrCodes().size() ; count++) {
         Map<String , Object> xx = (Map<String, Object>) audience.getQrCodes().get(count);
         //System.out.println("Key is :"+xx.get(audience.getAudienceName()+"Day"+count));
         //System.out.println(LocalDate.now());
         //System.out.println(LocalDate.now() +" == " + xx.get(audience.getAudienceName()+"Day"+0));
         String DateForToday = LocalDate.now().toString();

         if(DateForToday.equals(xx.get(audience.getAudienceName()+"Day"+count).toString()) && xx.get("Scan").equals(false)) {
             System.out.println("Iam in For Loop");
             update.set(xx.get("Scan").toString(), true);

             System.out.println(update.set(xx.get("Scan").toString(), true));
            // Query to Update Scan = false to Scan True
             Query query = new Query();
                query.addCriteria(Criteria
                        .where("audienceId").is(audienceId));
             System.out.println(query);


             mongoOperation.findAndModify(query, update, Audience.class);
             result.put("success", audience);
             return new ResponseBody("success",result);
         }
         if(DateForToday.equals(xx.get(audience.getAudienceName()+"Day"+count).toString()) && xx.get("Scan").equals(true) ) {
             result.put("Qr For this Day But is Scanned", null);
             return new ResponseBody("failed",result);
         }
    }
    result.put("Qr is not for this Day", null);
    return new ResponseBody("failed",result);

}
 "status": "success",
    "result": {
        "success": {
            "audienceId": "5e8e478509270606a25334bf",
            "eventName": "skills",
            "audienceName": "wesam",
            "audienceEmail": "[email protected]",
            "audienceNumber": "0796945849",
            "qrCodes": [
                {
                    "Scan": false,
                    "mohammad qabbaniDay0": "2020-04-09"
                },
                {
                    "Scan": false,
                    "mohammad qabbaniDay1": "2020-04-10"
                }
            ],
            "pathQr": "var/www/html/storage/PRQRS/skills",
            "link": "test.com/mohammad qabbani/null"
        }
    }
}
java mongodb spring-boot spring-data-mongodb
1个回答
0
投票

这会将qrCodes数组子文档字段Scan的所有元素更新为true

假设输入文档为:

{
            "audienceId": "5e8e478509270606a25334bf",
            "eventName": "skills",
            "audienceName": "wesam",
            "audienceEmail": "[email protected]",
            "audienceNumber": "0796945849",
            "qrCodes": [
                {
                    "Scan": false,
                    "mohammad qabbaniDay0": "2020-04-09"
                },
                {
                    "Scan": false,
                    "mohammad qabbaniDay1": "2020-04-10"
                }
            ],
            "pathQr": "var/www/html/storage/PRQRS/skills",
            "link": "test.com/mohammad qabbani/null"
}

Spring Data MongoDB代码:

String audienceId = "5e8e478509270606a25334bf";

Query query = new Query();
query.addCriteria(Criteria.where("audienceId").is(audienceId));
Update update = new Update().set("qrCodes.$[].Scan", true);

MongoOperations mongoTemplate = new MongoTemplate(MongoClients.create(), "testDB");
Audience previous = mongoTemplate.findAndModify(query, update, Audience.class);
© www.soinside.com 2019 - 2024. All rights reserved.