首先,哪个最好?findAndModifyfindOneAndUpdatefindByIdAndUpdate

就我而言,我得到了一张这样的表:

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 作为第一个参数。

10-06 02:02