首先,哪个最好?findAndModify
或 findOneAndUpdate
或 findByIdAndUpdate
?
就我而言,我得到了一张这样的表:
seqkeys
{
"_id" : "invoice",
"seq" : NumberInt(1)
},
{
"_id" : "receipt",
"seq" : NumberInt(1)
}
我想找到发票的序列号,加 1 并保存。 (然后使用该编号将真实发票记录保存在发票表中)
但我不能让它工作,我经常得到
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
nodejs 函数....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 在 >= 3.2 版本中也引入了 findOneAndUpdate)和 findByIdAndUpdate
。这就是 findAndModify
不适用于 Mongoose 的原因。
至于哪个更好,在 findOneAndUpdate 中你可以传递包含多个字段的查询对象,而 findByIdAndUpdate 只将 id 作为第一个参数。