Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌入文档插入mongodb文档中的新字段_Mongodb_Embedded Documents - Fatal编程技术网

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

将嵌入文档插入mongodb文档中的新字段,mongodb,embedded-documents,Mongodb,Embedded Documents,我在mongodb集合中有这样一个文档: { _id: 133, Name: "abc", Price: 20 } 我想添加一个新字段“PackSizes”,它可能是数组类型的,也可能不是数组类型的,然后我想在其中嵌入一个文档。像- PackSizes: [ {_id: 123, PackSizeName:"xyz", UnitName:"pqr"} ] or, PackSizes: {_id: 123, P

我在mongodb集合中有这样一个文档:

{
   _id: 133,
   Name: "abc",
   Price: 20
}
我想添加一个新字段“PackSizes”,它可能是数组类型的,也可能不是数组类型的,然后我想在其中嵌入一个文档。像-

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

or,

PackSizes:  {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
我是mongodb的新手。请帮忙。

你可以用

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"
        }
    ]
}

在您的Json结构中,_id是mongoDB不可变字段,因此在您的例子中,如果您将_id更改为simply 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)}
       )

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

处理器谢谢。请告诉我如何在PackSizes[]字段中添加一个新的PackSize?db.test.update({u id:133},{$push:{PackSizes:{{u id:124,PackSizeName:“xyz”,UnitName:“pqr”}}})它创建了一个错误-字段“PackSizes”必须是一个数组,但类型为Object….您应该对PackSizes:[{{u id:123,PackSizeName:“xyz”,UnitName:“pqr”}]然后像我说的那样使用$push命令。我对它进行了测试;)跳过“步骤1”,立即使用“push”对我也有效。“push”为我创建了一个新的数组,如果还没有的话