mongoose findAndModify或findOneAndUpdate -“不是一个函数”

68bkxrlz  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(325)

首先 , 哪 一 个 最 好 ? findAndModifyfindOneAndUpdate 还是 findByIdAndUpdate
在 我 的 例子 中 , 我 得到 了 这样 一 个 表 :

    • 序列 键 * *
{ 
    "_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 节点 函数 ... .

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);
        };
    });
})};

格式

wn9m85ua

wn9m85ua1#

Mongoose有findOneAndUpdate(相当于mongoBD的findAndModify。MongoDB在3.2版本中也引入了findOneAndUpdate)和findByIdAndUpdate。这就是为什么findAndModify不能与Mongoose一起工作的原因。
至于哪一个更好,在findOneAndUpdate中可以传递包含多个字段的查询对象,而findByIdAndUpdate只取id作为第一个参数。

rhfm7lfc

rhfm7lfc2#

findAndModify是MongoDB的一个函数,这就是为什么Mongoose不能使用它的原因。
findOneAndUpdatefindByIdAndUpdate都可以很好地与Mongoose一起工作,如果您希望使用_id在数据库中搜索,则可以使用findByIdAndUpdate,否则如果您使用不同的字段在数据库中搜索,则可以使用findOneAndUpdate
但是,如果您尝试在MongoDB中使用findAndModify,则可能会收到以下警告:

DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.

若要消除这种情况,请在程式码中使用下列程式码:

mongoose.set('useFindAndModify', false);

以防万一,findByIdAndUpdatefindOneAndUpdate之间的区别:
findByIdAndUpdate(id,...)等效于findOneAndUpdate({ _id:ID },...)

相关问题