带有子文档数组的$ addToSet

时间:2014-02-19 15:04:10

标签: node.js mongodb mongoose

我有以下更新查询:

var where = 'answers.round_' + ans.round + '_' + ans.iteration

Game.findByIdAndUpdate(gameId, {
    $addToSet: {
        where: ans
    }
}, function(err, model) {
    if (err)
        throw err
    console.log('after game update with answer ' + JSON.stringify(model))
    callback()
})

,数据库结构如下所示:

 "_id: ObjectId("5304bc1dcf36941e3adcd3fd"),
 "answers" : {
    "round_1_1" : [],
    ...
  }

问题是ans对象没有被推入"round_1_1"数组(不是我检查它不是null)。回调中的模型是我想要更新的模型,只是更新不会发生。

我的问题类似于this,就像点符号不起作用(即使在控制台上输出answers.round_1_1

1 个答案:

答案 0 :(得分:1)

您正在努力将其推入不存在的where数组中。因为模型中没有这样的字段,所以Monggose newer将它发送到MongoDB。

问题在于您如何构建查询。请尝试以下代码:

var query = {$addToSet: {}}
  , where = 'answers.round_' + ans.round + '_' + ans.iteration;

query.$addToSet[where] = ans;

Game.findByIdAndUpdate(gameId, query, function(err, model) {
    // Your callback function
})