我有mongo文件如下:
{
"_id" : ObjectId("506e9e54a4e8f51423679428"),
"description" : "ffffffffffffffff",
"menus" : [
{
"_id" : ObjectId("506e9e5aa4e8f51423679429"),
"description" : "ffffffffffffffffffff",
"items" : [
{
"name" : "xcvxc",
"description" : "vxvxcvxc",
"text" : "vxcvxcvx",
"menuKey" : "0",
"onSelect" : "1",
"_id" : ObjectId("506e9f07a4e8f5142367942f")
} ,
{
"name" : "abcd",
"description" : "qqq",
"text" : "qqq",
"menuKey" : "0",
"onSelect" : "3",
"_id" : ObjectId("507e9f07a4e8f5142367942f")
}
]
}
]
}
现在我想将其更改为:
{
"_id" : ObjectId("506e9e54a4e8f51423679428"),
"description" : "ffffffffffffffff",
"menus" : [
{
"_id" : ObjectId("506e9e5aa4e8f51423679429"),
"description" : "ffffffffffffffffffff",
"items" : {
{
"name" : "xcvxc",
"description" : "vxvxcvxc",
"text" : "vxcvxcvx",
"menuKey" : "0",
"onSelect" : "1",
"_id" : ObjectId("506e9f07a4e8f5142367942f")
} ,
{
"name" : "abcd",
"description" : "qqq",
"text" : "qqq",
"menuKey" : "0",
"onSelect" : "3",
"_id" : ObjectId("507e9f07a4e8f5142367942f")
}
}
}
]
}
这可能在mongo吗?在第一个模式中,原子上不可能更新becoz我们在更新深层时不能使用两个“$”。所以我想改变架构和第二架一样,我怎样才能实现呢?
首先我使用“$ push”在菜单中添加项目 ...
任何帮助都会很棒......
答案 0 :(得分:0)
您的更新正在更改“菜单”对象,因此我建议您更改架构,以便菜单是顶级文档,而不是其他文档中的数组。
菜单可以有一个引用它所属的顶级对象(在另一个集合中)的字段,也可以将顶级对象的字段反规范化为每个菜单文档。
在不了解应用程序的完整要求的情况下,很难知道架构何时“足够好”。