我在mongodb集合中有一个文档,如下所示:
{
_id: 133,
Name: "abc",
Price: 20
}
我想添加一个新字段" PackSizes" 可能是或不是数组类型的,然后想在其中嵌入文档。象 -
PackSizes:
[
{_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
]
or,
PackSizes: {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}
我是mongodb的新人。请帮忙。
答案 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)}
)
如果您按照给出的那样获得输出,那么首先应取消设置文档,然后设置更新