首先,哪一个最好?
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);
};
});
})};
答案 0 :(得分:5)
Mongoose有findOneAndUpdate
(相当于mongoBD findAndModify。MongoDB还在版本> = 3.2)和findByIdAndUpdate
中引入了findOneAndUpdate。这就是为什么findAndModify不适用于Mongoose。
至于哪一个更好,在findOneAndUpdate中,您可以传递包含多个字段的查询对象。 findByIdAndUpdate仅将id作为第一个参数。
答案 1 :(得分:1)
findAndModify
是MongoBD的功能,这就是为什么它不适用于Mongoose的原因。
findOneAndUpdate
和findByIdAndUpdate
在MongoDB上都可以很好地工作,也许如果您希望使用ID在数据库中进行搜索,那么就去findByIdAndUpdate
,否则,如果您正在使用自定义参数进行搜索然后在数据库中使用findOneAndUpdate
。
但是,如果您尝试使用findByIdAndUpdate
或findOneAndUpdate
,则可能会收到以下警告
DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
要消除这种情况,请在您的代码中写上以下内容
mongoose.set('useFindAndModify', false);