私はMongoDBで非常に奇妙な問題に苦しんでいます。私が望むのは、条件が一致する場合はクエリがドキュメントを更新し、そうでない場合は新しい(アップサート)を作成することです。
問題: 新しく挿入されたドキュメントが返されるため、コールバックから正しい結果が得られます。しかし、クエリがデータベースに挿入されないように見えます。
私がこれを引き起こすと思うのは、 $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);
}
});
// アップデート
データベースへのあらゆる種類の変更が黙って失敗しているように見えるので、クエリは正しいようです。