我有一个文档“所有者”,可以拥有“n”个营地,而营地具有“讲师”,而讲师具有“类(class)”。早些时候,我尝试使用嵌套数组来完成此操作(请参阅下面的文章链接),但是我了解到位置运算符“$”不会嵌套得那么深。
MongoDB: Adding an array into an existing array

但是,我了解到,解决方法是使用对象集合而不是数组。我假设我必须使用“update”和“$ set”来添加其他“camps”,但是每次我做的所有事情都会覆盖(更新)之前插入的camps。

以下是我要完成的层次结构:

owner = {

    firstName: 'john',
    lastName: 'smith',
    ownerEmail: '[email protected]',

    camps : {

        {
            name: 'cubs-killeen',
            location: 'killeen'
        },

        {
            name: 'cubs-temple',
            location: 'temple'
        },

        instructors : {

            {
                firstName: 'joe',
                lastName : 'black'
            },

            {
                firstName: 'will',
                lastName : 'smith'
            }
        }

    }

}

我也一直在尝试以下方法:
db.owners.update({ownerEmail:'[email protected]'}, {$set: { camps:{ {name:'cubs-killeen'} } }})

但这会引发意外的标识符{错误。

非常感谢提供一些示例mongo命令以实现上述结构的帮助。

V/R

克里斯

最佳答案

如前所述,您想要的结构无效。
我建议您的所有者文档采用以下结构:

    {
    "_id" : ObjectId("51c9cf2b206dfb73d666ae07"),
    "firstName" : "john",
    "lastName" : "smith",
    "ownerEmail" : "[email protected]",
    "camps" : [
            {
                    "name" : "cubs-killeen",
                    "location" : "killeen"
            },
            {
                    "name" : "cubs-temple",
                    "location" : "temple"
            }
    ],
    "instructors" : [
            {
                    "firstName" : "joe",
                    "lastName" : "black"
            },
            {
                    "firstName" : "will",
                    "lastName" : "smith"
            }
    ]
}

接着
db.stack.update(
  { ownerEmail: "[email protected]" },
  {
    $push: {
      camps: { name: "cubs-killeen", location: "some other Place" }
    }
  }
);

有了这个,您可以添加如下的阵营:

希望能帮助到你。

09-05 22:39