将嵌入文档插入mongodb文档中的新字段
我在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
{
_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”为我创建了一个新的数组,如果还没有的话