findAndModify或findOneAndUpdate – “不是一个函数”
首先,哪一个最好? findAndModify
或findOneAndUpdate
或findByIdAndUpdate
?
在我的情况下,我得到了这样一个表格:
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作为第一个参数。