我有这些数据:
{
"_id" : ObjectId("5a75baada0f20bd4e612d480"),
"Number" : 400,
"Page" : 24,
"DC" : "NE",
}
{
"_id" : ObjectId("5a75baada0f20bd4e612d489"),
"Number" : 300,
"Page" : 14,
"DC" : "100",
}
我想对这些数据进行建模,使其保持这样:
{Crs:{[
{Cr: {
"_id" : ObjectId("5a75baada0f20bd4e612d480"),
"Number" : 400,
"Page" : 24,
"DC" : "NE",
}},
{Cr: {
"_id" : ObjectId("5a75baada0f20bd4e612d489"),
"Number" : 300,
"Page" : 14,
"DC" : "100",
}},
]}}
我读过一些关于嵌入式文档的模型一对多关系,但我真的不知道它是如何工作的。 https://docs.mongodb.com/manual/core/data-model-design/
答案 0 :(得分:1)
我认为这里的文档应该有所帮助:https://docs.mongodb.com/manual/reference/operator/update/positional/#update-documents-in-an-array
在你的情况下,它会与此类似:
db.nameOfCollection.updateOne(
{ _id: ObjectId('idhere'), "Crs.Cr.Number": 400 },
{ $set: { "Crs.$.Cr.DC" : "SomethingNew" } }
)
有一点,我不确定你的数据结构是否正确,因为你在一个对象中有一个数组...为什么不只是一个数组,即
Crs: [{...}, {...}]
答案 1 :(得分:1)
使用聚合
> db.crs.aggregate(
[
{$group : {_id : null, crs : {$push : {cr : "$$ROOT"}}}},
{$project : {_id : 0}}
]
).pretty()
您还可以使用$out
在汇总管道中添加以下作为最后一个阶段
{$out : "crs"} // create collection crs
输出
> db.crs.aggregate([{$group : {_id : null, crs : {$push : {cr : "$$ROOT"}}}}, {$project : {_id : 0}}]).pretty()
{
"crs" : [
{
"cr" : {
"_id" : ObjectId("5a75baada0f20bd4e612d480"),
"Number" : 400,
"Page" : 24,
"DC" : "NE"
}
},
{
"cr" : {
"_id" : ObjectId("5a75baada0f20bd4e612d489"),
"Number" : 300,
"Page" : 14,
"DC" : "100"
}
}
]
}
>