1

X documents一気に更新しようと思います。要するに、基本的にランダムに選択N documentsしてから更新する必要があるということ"selected"です。質問をランダムに配布する必要がある API を設計しようとしています。私が試したマングースでこれを行う方法が見つかりません:

updateすべてを選択してしまう

Question
  .update({}, {
    $inc: {
      answerCount: 1,
      lockedCount: 1
    },
    $push:{
      devices: deviceID
    }
}, {multi:true})
 .limit(4)

--- 私もやってみました

Question
.find()
.sort({
   answerCount: 1,
   lockedCount: 1
})
.limit(req.query.limit || 4)
.update({}, {
    $inc: {
      answerCount: 1,
      lockedCount: 1
    },
    $push:{
      devices: deviceID
    }
}, { multi: true },  callback);

どちらもすべてのドキュメントを更新する結果になりました。これを使用せずにマングースにプッシュする方法はありますmapか? 私が言及しなかったもう 1 つのことは.update()、multi がないと 1 つのドキュメントが更新されるということです。

4

2 に答える 2

0

だから私は簡単なmap実装を行い、誰かがそれを行うためのより効率的な方法を見つけられない限り、それを使用します.

Question
  .find({
     devices: { $ne: deviceID}
    }, 
    { name: true, _id: true})
  .sort({
    answerCount: 1,
    lockedCount: 1
   })
  .limit(req.query.limit || 4)
  .exec(updateAllFound );

function updateAllFound(err, questions) {
  if (err) {
    return handleError(res, err);
  }
  var ids = questions.map(function(item){
    return item._id;
  });

  return Question.update({  _id: { $in: ids}   } ,
      {
      $inc: {
        answerCount: 1,
        lockedCount: 1
      },
      $push:{
        devices: deviceID
      }
  }, { multi: true }, getByDeviceID);

  function getByDeviceID(){
    return res.json(200, questions);
  }
}
于 2015-03-31T21:17:23.990 に答える