前提
我在项目中需要修改mongoDB中的一条记录的子集属性,如下:
{
"_id" : ObjectId("5c875d13bfb42a9cb35b8c73"),
"Product_Id" : "121-00738",
"ProductGroups" : [
{
"Product_Id" : "121-00738",
"Prod_Grp_Type" : "BIGR",
"Product_Group" : "10207111"
}
]
}
我要修改ProductGroups下Product_Group的值。
解决方法
db.collection.update({"ProductGroups.Product_Id":"121-00738","Prod_Grp_Type" : "BIGR"}, { $set : {"ProductGroups.$.Product_Group":"value" }})
Java 中解决方法:
Query oFilter = Query.query(Criteria.where("Product_Id").is("121-00738"));
oFilter.addCriteria(Criteria.where("ProductGroups.Product_Id").is("121-00738"));
oFilter.addCriteria(Criteria.where("ProductGroups.Prod_Grp_Type").is("BIGR"));
Update update =new Update();
update.set("ProductGroups.$.Product_Group", "value");
//执行
BulkOperations bulkOperations=mongoTemplate.bulkOps(BulkMode.UNORDERED, collectionName);
BulkWriteResult result=bulkOperations.updateOne(query, update).execute();