为了账号安全,请及时绑定邮箱和手机立即绑定

只需要更新java中mongo数组中的特定元素

只需要更新java中mongo数组中的特定元素

牧羊人nacy 2022-11-02 10:50:54
我想用过滤器更新 mongo 数组中的特定元素。我已经尝试过使用BasicDBObject,但不能使用过滤器,因为我有类型的集合MongoCollection。MongoCollection collection = db.getCollection(tnId);甚至尝试过:FindIterable<Document> document = collection.find(new BasicDBObject("DocumentName", documentName)                       .append("Attributes.name", "Party 1" ).append("Attributes.value", 12)                   .append("Attributes.actualValue.initialValue", USA));但在这种情况下,我得到的是整个记录,而且我必须再次遍历每个属性。mongo = new MongoClient("localhost", 27017);MongoDatabase db = mongo.getDatabase(companyName);MongoCollection collection = db.getCollection(tnId);我传递的实际数据是{    "DocumentName" : "doc1",    "Attributes" : [         {            "name" : "Party 1",            "value" : 12,            "actualValue" : {                "initialValue" : "USA"            }        },         {            "name" : "Party 1",            "value" : 16,            "actualValue" : {                "initialValue" : "SYSTEM"            }        }    ]}我想搜索actualValue为“USA”且属性值为12的属性,更新后的数据应如下所示{    "DocumentName" : "doc1",    "Attributes" : [         {            "name" : "Party 1",            "value" : 12,            "actualValue" : {                "initialValue" : "USA"            },            "updatedvalue" : {                "initialValue" : "USA",                "changedValue" : "Europe"             }        },         {            "name" : "Party 1",            "value" : 16,            "actualValue" : {                "initialValue" : "SYSTEM"            }        }    ]}
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

我是怎么做的。我制作了一个文档,在其中添加了我想要更新的所需数据。说


Document valueDocument = new Document();


valueDocument.put("InitialValue", USA);


BasicDBObject query = new BasicDBObject();

query.put("Attributes", att);


BasicDBObject data = new BasicDBObject();

data.put("Attributes.$.updatedvalue" + qCLevel, valueDocument);


BasicDBObject command = new BasicDBObject();

command.put("$set", data);

collection.updateOne(query, command);

它会在正确的位置插入数据。


查看完整回答
反对 回复 2022-11-02
?
手掌心

TA贡献1942条经验 获得超3个赞

试试这个


db.collection.updateMany(

 { "Attributes.actualValue.initialValue": "USA" },

 { $set: { "Attributes.$.updatedvalue" : {

            "initialValue" : "USA",

            "changedValue" : "Europe"

         } } }

)


查看完整回答
反对 回复 2022-11-02
?
弑天下

TA贡献1818条经验 获得超7个赞

db.collection.findOneAndUpdate({ "Attributes.actualValue.initialValue": "USA" }, 

  { $set: { "Attributes.$.updatedvalue.initialValue": "USA",      "Attributes.$.updatedvalue.changedValue": "Europe" } })



db.collection.findOneAndUpdate({ "Attributes.actualValue.initialValue": "USA" }, { $set: { "Attributes.$.updatedvalue.initialValue": "India", "Attributes.$.updatedvalue.changedValue": "印度” } })


查看完整回答
反对 回复 2022-11-02
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信