使用索引在Mongoose中设置数组元素的值

时间:2013-08-09 22:03:53

标签: mongodb mongoose

我正在尝试使用mongoose更新mongodb数组中特定索引处的元素。

db.Comment.findOneAndUpdate(
    {_id: '51fc9c329e87bf0000000001'},
    {$set: { 'body.0' : 'Comment Body'}}).exec(...);

这很好,但是,当我使用变量来设置索引时,它似乎不起作用。有谁知道为什么?

    var indexString = "'body.0'";

    db.Comment.findOneAndUpdate(
        {_id: '51fc9c329e87bf0000000001'},
        {$set: { indexString : 'Comment Body'}}).exec(...);

我将如何使其工作以便我可以根据需要设置索引?

2 个答案:

答案 0 :(得分:3)

改为使用对象:

var myIndex = { 'body.0' : 'Comment Body'};
var myIndex1 = { 'body.1' : 'xxx'};

db.Comment.findOneAndUpdate(
    {_id: '51fc9c329e87bf0000000001'},
    {$set: myIndex}).exec(...);

db.Comment.findOneAndUpdate(
    {_id: '51fc9c329e87bf0000000001'},
    {$set: myIndex1}).exec(...);

答案 1 :(得分:3)

对于后来偶然发现此问题的任何人,当前接受的答案并未解决代码中的实际问题,即用于设置索引的变量已被引用两次

var indexString = "'body.0'";

正是由于这个原因,第一个查询起作用(仅引用一次),而第二个查询不起作用。将上述行更改为此将解决此问题:

var indexString = 'body.0';