2014-02-25 57 views
3

我已经文档结构化等,从而更新在数组中的子文档:MongoDB的:使用索引

{ 
key: "apples002", 

main: [ 
     {q: "Is the apple green?", a1: "The apple is not green.", a2: "No."}, 

     {q: "What color is the apple?", a1: "The apple is yellow.", a2: "Yellow."} 
     ], 

alt: [ 

     {q: "What color is the apple?", a1: "The apple is red."}, 

     {q: "Is the apple yellow?", a1: “The apple is yellow.”, a2: “Yes.”} 
    ] 

}

我看到用于更新子文档字段几个实例中,但最重要的其中的子文件具有唯一的ID。我还学会了如何通过索引来引用其中一个子文档,例如更新上述主(第一元件)在q字段:

myDB.update({key: 'apples002'}, {$set: {'main.0.q': 'Updated question goes here'}}) 
在我的情况

所以,我想在代替上述数组的索引0的使用可变。我试图用正确的字符串值创建一个局部变量,并使用它来代替上面的'main.0.q',但那不起作用。有任何想法吗?

+0

[在mongodb更新中使用变量]可能的重复(http://stackoverflow.com/questions/12393351/using-a-variable-in-mongodb-update) – JohnnyHK

回答

1

@JohnnyHK,你说的对,它本质上是重复的。我试过并试图在昨天找到这个信息,但无法做到,所以我认为用几种形式来解决这个问题并不是一个坏主意。

我已经适应JohnnyHK的回答显示我怎样做才能使上面的更新工作,为索引的变量:

var setModifier = { $set: {} }; 

    setModifier.$set['main.' + myIndex + '.q'] = 'Updated question goes here.'; 

    PL.update({key: 'apples002'}, setModifier); 

谢谢,JohnnyHK!

+0

我刚回去检查官方的MongoDB和我没有看到任何有关使用$ set的方法。你在哪里找到这个东西的?另外,我假设你不能以编程方式构建像这样更新多个字段的set修饰符?不是我在抱怨,我只是很高兴可以使用索引。 –