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