将嵌入的文档插入mongodb文档中的新字段

时间:2014-11-17 07:24:47

标签: mongodb embedded-documents

我在mongodb集合中有一个文档,如下所示:

{
   _id: 133,
   Name: "abc",
   Price: 20
}

我想添加一个新字段" PackSizes" 可能是或不是数组类型的,然后想在其中嵌入文档。象 -

PackSizes:
         [
             {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
         ]

or,

PackSizes:  {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}

我是mongodb的新人。请帮忙。

2 个答案:

答案 0 :(得分:10)

你可以用

完成
db.test.update(
   { _id : 133 },
   { $set : { PackSizes:  {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}} }
)

PackSizes可以是任何带有数组或没有数据的文档。

您的结果文件将是

{
    "_id" : 133,
    "Name" : "abc",
    "Price" : 20,
    "PackSizes" : {
        "_id" : 123,
        "PackSizeName" : "xyz",
        "UnitName" : "pqr"
    }
}

<强>更新 要添加新字段和成员到数组,

假设我们有原始文件

{
   _id: 133,
   Name: "abc",
   Price: 20
}

步骤1:添加新字段:PackSizes是一个数组

db.test.update(
   { _id : 133 },
   { $set : {PackSizes: [ {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}]}}
)

第2步:将新项目推送到数组

db.test.update(
   { _id : 133 },
   { $push : { PackSizes: {_id: 124, PackSizeName:"xyz", UnitName:"pqr"}} }
)

你会有

{
    "_id" : 133,
    "Name" : "abc",
    "Price" : 20,
    "PackSizes" : [ 
        {
            "_id" : 123,
            "PackSizeName" : "xyz",
            "UnitName" : "pqr"
        }, 
        {
            "_id" : 124,
            "PackSizeName" : "xyz",
            "UnitName" : "pqr"
        }
    ]
}

答案 1 :(得分:1)

在你的Json结构中_id是mongoDB不可变字段,所以在你的情况下如果你将_id改为id而_id代表mongo id,那么关注javascript可以解决你的问题

db.test.find().forEach(
           function(doc){ 
      db.upsert.update({},{"$unset:{"id":1,"Name":1,"Price":1}},false,true);
      db.upsert.update({},{"$set":{"PackSizes":doc}},true,false)}
       )

如果您按照给出的那样获得输出,那么首先应取消设置文档,然后设置更新