【发布时间】:2013-06-25 02:58:52
【问题描述】:
我有一个文档“所有者”,它可以有“n”个营地,营地有“讲师”,讲师有“课程”。早些时候,我尝试使用嵌套数组来完成此操作(请参阅下面我的帖子的链接),但是我了解到位置运算符“$”不会嵌套那么深。 MongoDB: Adding an array into an existing array
但是,我了解到解决方法是使用对象集合而不是数组。我假设我必须使用带有“$set”的“update”来添加额外的“camps”,但是每次我所做的一切都是覆盖(更新)之前插入的camp。
下面是我想要完成的层次结构:
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'
}
}
}
}
我也一直在尝试以下方法:
db.owners.update({ownerEmail:'john.smith@gmail.com'}, {$set: { camps:{ {name:'cubs-killeen'} } }})
但这会引发意外的标识符 { 错误。
对于实现上述结构的一些示例 mongo 命令的任何帮助将不胜感激。
V/R
克里斯
【问题讨论】:
-
那些不是有效的文件。您不能像尝试使用
camps和instructors那样拥有未命名的嵌套对象。 -
您的意思是
camps: {name:'cubs-killeen'}而不是camps:{ {name:'cubs-killeen'} }? -
@Relfor,是的,我就是这个意思!感谢您的澄清。现在,如何实现该文档结构?
-
MongoDB 或多或少是一个 javascript 对象存储。在 Javascript 中,列表(例如教师列表)使用 [] 括号而不是 {} 大括号。大括号 {} 包含存储键值对的对象。另外我认为课程应该是营地的另一个财产,而不是教练。您可以将时间表、位置和讲师作为课程的属性。
-
@Paul,感谢您的回复!我真正在寻找的是我必须使用什么 Mongodb 命令语法来实现这一点......或者我将如何使用 MongoJS 来做到这一点,或者。再次感谢!
标签: javascript node.js mongodb mongojs