我正在努力解决 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);
}
});
// 更新
好吧,似乎对数据库的所有更改都默默地失败了,所以查询似乎是正确的。