MongoDb:如何将其他对象插入到对象集合中?

cpe*_*e00 12 javascript mongodb node.js mongojs

我有一个文件"所有者",可以有"n"个阵营,营地有"教官",教师有"班级".之前我尝试使用嵌套数组来完成此操作(请参阅下面链接到我的帖子),但是我了解到位置运算符"$"没有嵌套那么深. MongoDB:将数组添加到现有数组中

但是,我了解到解决方法是使用对象集合而不是数组.我假设我必须使用"更新"和"$ set"来添加额外的"阵营",但是每次我做的都是覆盖(更新)之前插入的阵营.

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

owner = {

    firstName: 'john',
    lastName: 'smith',
    ownerEmail: 'john.smith@gmail.com',

    camps : {

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

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

        instructors : {

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

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

    }

}
Run Code Online (Sandbox Code Playgroud)

我也一直在尝试以下方面:

db.owners.update({ownerEmail:'john.smith@gmail.com'}, {$set: { camps:{ {name:'cubs-killeen'} } }})
Run Code Online (Sandbox Code Playgroud)

但是这会抛出一个意外的标识符{错误.

任何帮助一些示例mongo命令来实现上述结构将是非常感激的.

V/R

克里斯

Ant*_*ero 20

如上所述,您想要的结构无效.我建议您的所有者文档使用以下结构:

    {
    "_id" : ObjectId("51c9cf2b206dfb73d666ae07"),
    "firstName" : "john",
    "lastName" : "smith",
    "ownerEmail" : "john.smith@gmail.com",
    "camps" : [
            {
                    "name" : "cubs-killeen",
                    "location" : "killeen"
            },
            {
                    "name" : "cubs-temple",
                    "location" : "temple"
            }
    ],
    "instructors" : [
            {
                    "firstName" : "joe",
                    "lastName" : "black"
            },
            {
                    "firstName" : "will",
                    "lastName" : "smith"
            }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后

db.stack.update(
  { ownerEmail: "john.smith@gmail.com" },
  {
    $push: {
      camps: { name: "cubs-killeen", location: "some other Place" }
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

有了这个,你可以添加这样的阵营:

希望能帮助到你.

  • 那么,一个营地可以有几个教练?在这种情况下,只需将"教官"列表放在"营地"的每个营地内.为简单起见,你可以把它变成一个字符串数组:`"教师":["Joe Black","Will Smith","Some Other"]`.如果您想存储有关教师的更多信息,只需创建一个新的集合"教师"并将名称作为ID.`{"_ id":"Joe Black","年龄":21,"电话":"123"}`.在考虑使用Relational之前,请尝试考虑简单性以及如何查询数据.NoSQL(NoRelational)很难在你的脑海中捕获,但是当你这样做时它会得到回报. (2认同)