java - 如何编写更新嵌入文档的查询

标签 java mongodb spring-boot spring-data-mongodb

我是 spring data mongodb 的新手,但我只是坚持如何使用 mongo 存储库为嵌入式文档编写基于 json 的查询。

我的数据库看起来像

"_id" : ObjectId("5565ad670cf25cbd975ab2d9"),
    "_class" : "com.samepinch.domain.metadata.Metadata",
    "preferenceType" : "shopping",
    "subtypes" : [
        {
            "_id" : ObjectId("5565ad670cf25cbd975ab2d2"),
            "subType" : "veg",
            "preferencePoint" : 0
        },
        {
            "_id" : null,
            "subType" : "nonveg",
            "preferencePoint" : 0
        }
    ],
    "createdDate" : ISODate("2015-05-27T11:41:27.357Z"),
    "updatedDate" : ISODate("2015-05-27T11:41:27.357Z")

我想根据顶级文档 ID 更新子类型,我必须更新 ID 为 5565ad670cf25cbd975ab2d2 的子类型的首选项点 ,如何为此编写查询?

最佳答案

您应该使用$ projection使用 $elemMatch 查询如下:

db.collectionName.update({"_id" : ObjectId("5565ad670cf25cbd975ab2d9"),
"subtypes":{"$elemMatch":{"_id":ObjectId("5565ad670cf25cbd975ab2d2")}}},
{"$set":{"subtypes.$.preferencePoint":1}})

其等效的 java 代码为:

BasicDBObject eleMatch = new BasicDBObject();
eleMatch.put("_id", new ObjectId("5565ad670cf25cbd975ab2d2"));
BasicDBObject elemMatchQuery = new BasicDBObject();
elemMatchQuery.put("$elemMatch", eleMatch);
BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId("5565ad670cf25cbd975ab2d9"));
query.put("subtypes", elemMatchQuery);
BasicDBObject set = new BasicDBObject();
set.put("subtypes.$.preferencePoint", 1);
BasicDBObject update = new BasicDBObject();
update.put("$set", set);
DBCollection dbcoll = mongoTemplate.getCollection("collectionName");
DBObject object = dbcoll.update(query, update);

关于java - 如何编写更新嵌入文档的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482915/

相关文章:

java - 关于为什么按下按键时三角形不旋转有什么建议吗?

java - 第三个 Activity 的 bundle 为空

node.js - 如何在回调之外访问 Mongoose 验证错误

mongodb - BasicBSONList 只能使用数字键,不能使用 : [_id]

java - Spring中@EnableWebSecurity有什么用?

java - SpringApplication.run 主方法

Java休息API : how to check connection between client and endpoint?

java - 如何使用 Spring WebFlux WebFilter 结束请求并发送正确的响应?

如果没有文档,MongoDB 聚合返回计数为 0

spring-mvc - Spring Boot 2 + Webjars + Bootstrap + Thymeleaf = 未应用主题