0

我正在努力解决 MongoDB 中非常奇怪的问题,我想要的是如果条件匹配,则查询更新文档,如果不创建新的(upsert)。

问题:我从回调中得到了正确的结果,因为它返回了新插入的文档。但是出现的查询永远不会插入到数据库中

我认为导致这种情况的是 $set 部分,它正在寻找数组,但它必须是对象:

boards [
  // Looks for element 48 and inserts there
] 

{ '$set': 
   { 'boards.48.acl': 'ReadWrite',
     'boards.48.status': 'goal' } }

这是查询:

// the 11 is example input
var scoreKey  = util.format('scores.' + 11),
    aclKey    = scoreKey + '.acl',
    statusKey = scoreKey + '.status',
    setQuery  = {
        $set: { }
    };

setQuery['$set'][aclKey] = acl;
setQuery['$set'][statusKey] = status;

db.sessions.findAndModify({
    query: { '_id': sid },
    update: setQuery,
    upsert: true,
    new: true
}, function (err, res) {
    if (err) return cb(err);
    else {
        console.log(res);
        return cb(null, res);
    }
});

// 更新

好吧,似乎对数据库的所有更改都默默地失败了,所以查询似乎是正确的。

4

0 回答 0