我在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
});
我需要计算插入的文档。我怎么能这样做?
答案 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"并创建了一个新文档。