MongoDB:使用索引更新数组中的子文档

3

我有一个结构化的文档,如下所示:

{ 
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',但这并不起作用。有什么建议吗?


可能是在MongoDB更新中使用变量的重复问题。 - JohnnyHK
1个回答

1

@JohnnyHK,你说得对,这基本上是一个重复的问题。昨天我试图找到这个信息,但一直找不到,所以我认为把这个问题以几种形式留下来不是个坏主意。

我已经改编了JohnnyHK的答案,展示了我必须做的工作,以便将上述更新与索引变量一起使用。

    var setModifier = { $set: {} };

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

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

感谢,JohnnyHK!

我刚才回去查了一下官方的MongoDB文档,没有看到关于以这种方式使用$set的任何内容。你是从哪里找到这些东西的?此外,我假设您无法以编程方式构建像这样更新多个字段的集合修改器?我并不是在抱怨,我只是很高兴可以使用索引。 - Michael McC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接