findAndModify或findOneAndUpdate – “不是一个函数”

首先,哪一个最好? findAndModifyfindOneAndUpdatefindByIdAndUpdate

在我的情况下,我得到了这样一个表格:

seqkeys

 { "_id" : "invoice", "seq" : NumberInt(1) }, { "_id" : "receipt", "seq" : NumberInt(1) } 

我想find发票的序号,加1并保存。 (然后使用该号码将实际发票logging保存在发票表中)

但我不能得到这个工作,我不断得到

 TypeError: seqkeysTable.findAndModify is not a function 

所以这里是我的模型:

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var seqkeysSchema = new Schema({ _id: String, // Table Name seq: Number // Sequence Number }); module.exports = mongoose.model('seqkeysModel', seqkeysSchema,'seqkeys'); 

这里是我的findkey nodejsfunction….

 var seqkeysModel = require('../../models/seqkeysModel'); var seqkeysTable = mongoose.model('seqkeysModel'); var findKey = function(tableName) { return new Promise((resolve, reject) => { seqkeysTable.findAndModify( { "_id": tableName }, { $inc: {"seq":1} }, { new: true } ,function (err, data) { if (err) { reject(new Error('findKey ERROR : ' + err)); return; } else { resolve(data.seq); }; }); })}; 

Mongoose有findOneAndUpdate (相当于mongoBD findAndModify ,MongoDB也引入了findOneAndUpdate版本> = 3.2)和findByIdAndUpdate 。 这就是为什么findAndModify不能用于Mongoose。

至于哪一个更好,在findOneAndUpdate中可以传递包含多个字段的查询对象。 findByIdAndUpdate只将id作为第一个参数。