我在mongoDB中有一个非常复杂的数据结构。该文件看起来有点像这样
{
"id" : 0,
"basket" : [
{
"price" : 0.9918,
"id" : 2500,
"exGroup" : [
{
"exgId" : 0,
"ePrice" : 0.9918
}
{
"exgId" : 1,
"ePrice" : 0.9918
}
]
}, ]}
我想在嵌入式文档的exGroup数组中添加一个文档数组,以便每个嵌入的文档看起来像这样
{
"id" : 0,
"price" : 0.9918
"order" : {
"id":0,
"exec":
[{
"quantity" : 1,
"price" : 1.0
},
{
"quantity" : 1,
"price" : 1.01
}
]
}
我尝试使用如下所示的更新查询执行此操作:
db.fund.update(
{
"id": 0,
"basket.id": 2500,
"basket.exGroup.exgId": 0,
"basket.exGroup.order": {"$exists" : false}
},
{
"$set":
{
"basket.exGroup.$.order" :
{
"id":0,
"exec":
[{
"quantity":1,
"price":0.9978
}]
}
}
}
)
不幸的是,这给了我错误" fundId":0, " date":ISODate(" 2016-11-21T11:00:00.000 + 0000"), " basket.assetId":2500, " basket.exGroup.exgId":0
从根本上说,我的问题是我不知道如何正确处理多级数组(即doc.array.doc.array.doc)文档中的文档。
答案 0 :(得分:0)
db.rich.update(
{
"id": 0,
"basket.id": 2500,
"basket.exGroup.exgId": 0,
"basket.exGroup.order": {"$exists" : false}
},
{
"$push":
{
"basket.$.exGroup" :
{
"id":0,
"exec":
[{
"quantity":1,
"price":0.9978
}]
}
}
}
)
这将基本更新exGroup并推送一个新文档。但是你需要相应地为你的文档建模。