8

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

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

我想添加一个新字段“PackSizes”,它可能是也可能不是数组类型,然后想在其中嵌入一个文档。喜欢-

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

or,

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

我是 mongodb 的新手。请帮忙。

4

2 回答 2

15

你可以这样做

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"
        }
    ]
}
于 2014-11-17T07:42:23.617 回答
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)}
       )

如果您实现了您给出的输出,那么首先您应该取消设置您的文档,然后设置更新

于 2014-11-17T08:00:19.273 回答