2012-03-13 157 views
1

自从一周以来我一直在使用MongoDB,我对它有很多乐趣!从其他对象中获取对象

到目前为止,我正在构建的项目和里程碑测试应用程序。看到下面的结构:

{ 
    "code": "test-project", 
    "milestones": [ 
    { 
     "name": "Test Milestone", 
     "code": "test-milestone" 
    }, 
    { 
     "name": "Test Milestone 2", 
     "code": "test-milestone-2" 
    } 
    ], 
    "name": "Test Project" 
} 

我现在正在为里程碑做一个编辑表单。我想编辑让我们说,“测试里程碑2”。所以,到目前为止,我已经获得了相关的项目,然后从关联的集合中选择了正确的里程碑。但我想知道是否有办法直接获得里程碑? (在我的情况下)

如果是,那么你能给我一个如何做的例子吗?

谢谢!

回答

0

将您的里程碑数组嵌入项目本身。

或继续做你现在正在做的事情。 (你没有做错,只是它的本质)

+0

里程碑嵌入我的项目中,不是吗?你能告诉我一个你想说什么的例子吗?谢谢! – TomShreds 2012-03-14 01:10:04

1

你可以用直接查询来做到这一点。你只需要使用Positional Operator

假设您要将“测试里程碑2”更新为“测试里程碑2”。您可以运行下面的查询:

db.Projects.update({"milestones.name" : "Test Milestone 2"}, {$set : {"milestones.$.name" : "Test Milestone Two"}}) 

$握着你的原始阵列发现的地方(update语句的第一部分)。这可以让你直接跳到你想修改的数组元素。

很高兴听到您在享受MongoDB - 这很有趣。

+0

感谢您的回复。但是如果另一个项目有一个称为“测试里程碑2”的里程碑呢?在你给我的例子中,这是所有的项目,所以我想知道。谢谢! – TomShreds 2012-03-14 01:09:20

+1

我给出的查询将更改与“测试里程碑2”匹配的所有里程碑的名称。当它运作时,每个位置运算符将应用于它影响的当前文档。如果您只想影响一个,则需要在更新语句的第一部分中过滤条件。 – SethO 2012-03-14 02:38:16