如何使用$ setOnInsert计算upserted文档?

时间:2014-06-02 06:29:26

标签: node.js mongodb mongoose mongodb-query

我在mongoose中使用以下更新查询:

Doc.findOneAndUpdate({
  name: 'Ekik'
}, {$setOnInsert: {key: value}}, {upsert: true, new: true}, function (err, doc) {
     // How to get upserted count here?
     console.log(doc.isNew); // always true either document upserted or don't
});

我需要计算插入的文档。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

回调中findOneAndUpdate()的返回签名是err和已修改或插入的document。还有一个默认情况,即返回的文件是"修改过的"文档,除非您将参数设置为false

查看示例案例:

    var mongoose = require('mongoose'),
        Schema = mongoose.Schema,
        ObjectId = require('mongodb').ObjectID;

    mongoose.connect('mongodb://localhost/test');

    var uptestSchema = new Schema({
      value: Number
    });

    var Uptest = mongoose.model( "uptest", uptestSchema, "uptest" );

    var id = new ObjectId("538c1fea6369faeced1b7bfb");

    console.log( id )

    Uptest.findOneAndUpdate(
      { _id: id },
      { "$setOnInsert": { value: 3 } },
      { upsert: true, new: false },
      function(err, doc) {

        console.log( doc );

      }
    );

现在,如果给定_id的文档存在,那么我希望看到"原文"没有修改的文件返回。无论如何,只有 $setOnInsert ,所以不会有任何变化。

然而,如果" upsert"发生"原始"的返回值文件将是null,因为最初没有文件。这就是告诉你操作导致" upsert"并创建了一个新文档。