【问题标题】:Updating specific subdocuments in MongoDB :更新 MongoDB 中的特定子文档:
【发布时间】:2013-05-25 05:23:13
【问题描述】:

在我的 MongoDB 中,我有 Document,如下所示。 如何更新内部文档结构中的文档如下所示:[{1},[{2}],[{3}],[{4}]]

例如:子文档中的子文档有 objectId:1objectId:2objectId:3objectId:4。 喜欢:

[{ _id : ObjectId("1")}],
[{ _id : ObjectId("2")}], 
[{ _id : ObjectId("3")}],
[{ _id : ObjectId("4")}]


"Child": [{
    "_id": ObjectId("1"),
     Name: "Raghu",
     Age : 21,

    "subchild": [{
            "_id": ObjectId("2"),
            "Name": "Yuva",
             Age : 23,
        },
        [{
                "_id": ObjectId("3"),
                 Name: "Ravi",
                 Age : 25
            }
        ],
        [{
                 "_id": ObjectId("4"),
                "Name": "Ram",
                  Age : 27
            }
        ]
    ],
}

]

如何更新以下子文档特定的_Id:ObjectId(“3”)和_Id:ObjectId(“4”) 例如:[{ "_id": ObjectId("4"), "Name": "Ram", } ]

我在 C# 中试过这样:

          I updated ObjectId : 1 like  Example   child.$.Subchild.0.Name="Raghu" 
        But not Updated ObjectId : 4 like  Example   child.$.Subchild.3.Name="Ram"           

    MongoServerSettings settings = new MongoServerSettings();
        settings.Server = new MongoServerAddress("127.1.1.1", 27017);
        MongoServer servers = new MongoServer(settings);
        var db = servers.GetDatabase("StudentDB");
        MongoCollection<Student> pax;
        pax = db.GetCollection<Student>("StudentDetails");
        IMongoQuery queryEdit = Query.EQ("Child.subchild._id", new ObjectId("4"));
        var updateValues = new List<UpdateBuilder>();
        { updateValues.Add(Update.Set("child.$.Subchild.3.Name", "Ramu")); }
        updateValues.Add(Update.Set("child.$.subchild.3.Age", 27));
        IMongoUpdate update = Update.Combine(updateValues);  
        SafeModeResult sm = pax.Update(queryEdit, update, UpdateFlags.None, SafeMode.True);

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    child.$.Subchild.0.Name="Raghu" 不需要对第一个数组游标的引用,需要对第二个游标的引用 child.Subchild.$.Name="Raghu" 对于 MongodDB 不要更新两个引用“$”

    db.foo.update({_id:ObjectId(...),"child.Subchild.Name":"Ram"},{$set:{child.Subchild.$.Name="Raghu"}});
    

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多