エラーがどこにあり、なぜデータベースが更新されなかったのかを調べるために数時間費やした後、実際にデータベースが更新されたことがわかりました。問題は、mongoシェルで更新をチェックしていて、nodejs postリクエストで更新した後、更新されたものとしてシェルに表示されなかったことです。ただし、ラベルをconsole.log()すると、更新されました。そこで、問題をさらに調査したところ、問題はmongoシェルではなく、mongooseコマンドの更新の誤った使用法であることがわかりました。コールバック引数がありませんでした。コールバック関数を追加した後、データはすぐにmongoシェルで更新されました。
したがって、実行する代わりに:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true})
コールバックを追加することを忘れてはなりません:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}, function(err, affected) {
if(err)
console.log(err)
else
console.log(affected)
// After successful update, redirect here to another page...
または、重複した回答がexec()の実行を示唆している場合:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}).exec()