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

huangapple go评论109阅读模式
英文:

How to Update array field in MognoDB using Java Spring Boot?

问题

  1. @GetMapping("/scannQr/{audienceId}/{eventName}/{Date}")
  2. public ResponseBody scannQr(@PathVariable String audienceId , @PathVariable String eventName , @PathVariable String Date) {
  3. Map<String, Object> result = new HashMap<>();
  4. Update update = new Update();
  5. Audience audience = audienceRepository.findByAudienceIdAndEventName(audienceId, eventName);
  6. //check Audience if his name in database
  7. if(audience == null) {
  8. result.put("Sorry Can't found Audience", audience);
  9. return new ResponseBody("failed",null);
  10. }
  11. for(int count = 0 ; count<audience.getQrCodes().size() ; count++) {
  12. Map<String , Object> xx = (Map<String, Object>) audience.getQrCodes().get(count);
  13. String DateForToday = LocalDate.now().toString();
  14. if(DateForToday.equals(xx.get(audience.getAudienceName()+"Day"+count).toString()) && xx.get("Scan").equals(false)) {
  15. System.out.println("Iam in For Loop");
  16. update.set(xx.get("Scan").toString(), true);
  17. Query query = new Query();
  18. query.addCriteria(Criteria.where("audienceId").is(audienceId));
  19. mongoOperation.findAndModify(query, update, Audience.class);
  20. result.put("success", audience);
  21. return new ResponseBody("success",result);
  22. }
  23. if(DateForToday.equals(xx.get(audience.getAudienceName()+"Day"+count).toString()) && xx.get("Scan").equals(true) ) {
  24. result.put("Qr For this Day But is Scanned", null);
  25. return new ResponseBody("failed",result);
  26. }
  27. }
  28. result.put("Qr is not for this Day", null);
  29. return new ResponseBody("failed",result);
  30. }
  1. "status": "success",
  2. "result": {
  3. "success": {
  4. "audienceId": "5e8e478509270606a25334bf",
  5. "eventName": "skills",
  6. "audienceName": "wesam",
  7. "audienceEmail": "wesam@gmail.com",
  8. "audienceNumber": "0796945849",
  9. "qrCodes": [
  10. {
  11. "Scan": false,
  12. "mohammad qabbaniDay0": "2020-04-09"
  13. },
  14. {
  15. "Scan": false,
  16. "mohammad qabbaniDay1": "2020-04-10"
  17. }
  18. ],
  19. "pathQr": "var/www/html/storage/PRQRS/skills",
  20. "link": "test.com/mohammad qabbani/null"
  21. }
  22. }
英文:

I want to Update Scan to true if qr Code is scan i have issue with query .

  1. @GetMapping(&quot;/scannQr/{audienceId}/{eventName}/{Date}&quot;)
  2. public ResponseBody scannQr(@PathVariable String audienceId , @PathVariable String eventName , @PathVariable String Date) {
  3. Map&lt;String, Object&gt; result = new HashMap&lt;&gt;();
  4. Update update = new Update();
  5. Audience audience = audienceRepository.findByAudienceIdAndEventName(audienceId, eventName);
  6. //check Audience if his name in database
  7. if(audience == null) {
  8. result.put(&quot;Sorry Can`t found Audience&quot;, audience);
  9. return new ResponseBody(&quot;failed&quot;,null);
  10. }
  11. for(int count = 0 ; count&lt;audience.getQrCodes().size() ; count++) {
  12. Map&lt;String , Object&gt; xx = (Map&lt;String, Object&gt;) audience.getQrCodes().get(count);
  13. //System.out.println(&quot;Key is :&quot;+xx.get(audience.getAudienceName()+&quot;Day&quot;+count));
  14. //System.out.println(LocalDate.now());
  15. //System.out.println(LocalDate.now() +&quot; == &quot; + xx.get(audience.getAudienceName()+&quot;Day&quot;+0));
  16. String DateForToday = LocalDate.now().toString();
  17. if(DateForToday.equals(xx.get(audience.getAudienceName()+&quot;Day&quot;+count).toString()) &amp;&amp; xx.get(&quot;Scan&quot;).equals(false)) {
  18. System.out.println(&quot;Iam in For Loop&quot;);
  19. update.set(xx.get(&quot;Scan&quot;).toString(), true);
  20. System.out.println(update.set(xx.get(&quot;Scan&quot;).toString(), true));
  21. // Query to Update Scan = false to Scan True
  22. Query query = new Query();
  23. query.addCriteria(Criteria
  24. .where(&quot;audienceId&quot;).is(audienceId));
  25. System.out.println(query);
  26. mongoOperation.findAndModify(query, update, Audience.class);
  27. result.put(&quot;success&quot;, audience);
  28. return new ResponseBody(&quot;success&quot;,result);
  29. }
  30. if(DateForToday.equals(xx.get(audience.getAudienceName()+&quot;Day&quot;+count).toString()) &amp;&amp; xx.get(&quot;Scan&quot;).equals(true) ) {
  31. result.put(&quot;Qr For this Day But is Scanned&quot;, null);
  32. return new ResponseBody(&quot;failed&quot;,result);
  33. }
  34. }
  35. result.put(&quot;Qr is not for this Day&quot;, null);
  36. return new ResponseBody(&quot;failed&quot;,result);
  37. }
  1. &quot;status&quot;: &quot;success&quot;,
  2. &quot;result&quot;: {
  3. &quot;success&quot;: {
  4. &quot;audienceId&quot;: &quot;5e8e478509270606a25334bf&quot;,
  5. &quot;eventName&quot;: &quot;skills&quot;,
  6. &quot;audienceName&quot;: &quot;wesam&quot;,
  7. &quot;audienceEmail&quot;: &quot;wesam@gmail.com&quot;,
  8. &quot;audienceNumber&quot;: &quot;0796945849&quot;,
  9. &quot;qrCodes&quot;: [
  10. {
  11. &quot;Scan&quot;: false,
  12. &quot;mohammad qabbaniDay0&quot;: &quot;2020-04-09&quot;
  13. },
  14. {
  15. &quot;Scan&quot;: false,
  16. &quot;mohammad qabbaniDay1&quot;: &quot;2020-04-10&quot;
  17. }
  18. ],
  19. &quot;pathQr&quot;: &quot;var/www/html/storage/PRQRS/skills&quot;,
  20. &quot;link&quot;: &quot;test.com/mohammad qabbani/null&quot;
  21. }
  22. }
  23. }

答案1

得分: 0

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

假设输入文档如下:

  1. {
  2. "audienceId": "5e8e478509270606a25334bf",
  3. "eventName": "skills",
  4. "audienceName": "wesam",
  5. "audienceEmail": "wesam@gmail.com",
  6. "audienceNumber": "0796945849",
  7. "qrCodes": [
  8. {
  9. "Scan": false,
  10. "mohammad qabbaniDay0": "2020-04-09"
  11. },
  12. {
  13. "Scan": false,
  14. "mohammad qabbaniDay1": "2020-04-10"
  15. }
  16. ],
  17. "pathQr": "var/www/html/storage/PRQRS/skills",
  18. "link": "test.com/mohammad qabbani/null"
  19. }

Spring Data MongoDB 代码:

  1. String audienceId = "5e8e478509270606a25334bf";
  2. Query query = new Query();
  3. query.addCriteria(Criteria.where("audienceId").is(audienceId));
  4. Update update = new Update().set("qrCodes.$[].Scan", true);
  5. MongoOperations mongoTemplate = new MongoTemplate(MongoClients.create(), "testDB");
  6. Audience previous = mongoTemplate.findAndModify(query, update, Audience.class);
英文:

This updates all the elements of the qrCodes array sub-document field Scan to true.

Assuming the input document is:

  1. {
  2. &quot;audienceId&quot;: &quot;5e8e478509270606a25334bf&quot;,
  3. &quot;eventName&quot;: &quot;skills&quot;,
  4. &quot;audienceName&quot;: &quot;wesam&quot;,
  5. &quot;audienceEmail&quot;: &quot;wesam@gmail.com&quot;,
  6. &quot;audienceNumber&quot;: &quot;0796945849&quot;,
  7. &quot;qrCodes&quot;: [
  8. {
  9. &quot;Scan&quot;: false,
  10. &quot;mohammad qabbaniDay0&quot;: &quot;2020-04-09&quot;
  11. },
  12. {
  13. &quot;Scan&quot;: false,
  14. &quot;mohammad qabbaniDay1&quot;: &quot;2020-04-10&quot;
  15. }
  16. ],
  17. &quot;pathQr&quot;: &quot;var/www/html/storage/PRQRS/skills&quot;,
  18. &quot;link&quot;: &quot;test.com/mohammad qabbani/null&quot;
  19. }

The Spring Data MongoDB code:

  1. String audienceId = &quot;5e8e478509270606a25334bf&quot;;
  2. Query query = new Query();
  3. query.addCriteria(Criteria.where(&quot;audienceId&quot;).is(audienceId));
  4. Update update = new Update().set(&quot;qrCodes.$[].Scan&quot;, true);
  5. MongoOperations mongoTemplate = new MongoTemplate(MongoClients.create(), &quot;testDB&quot;);
  6. Audience previous = mongoTemplate.findAndModify(query, update, Audience.class);

huangapple
  • 本文由 发表于 2020年4月9日 06:11:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/61110863.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定