2017-07-29 95 views
1

首先,哪一個最好? findAndModifyfindOneAndUpdatefindByIdAndUpdatefindAndModify或findOneAndUpdate - 「不是函數」

在我來說,我有這樣的一個表:

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

回答

3

貓鼬有findOneAndUpdate(相當於mongoBD findAndModify。 MongoDB還在版本> = 3.2)和findByIdAndUpdate中引入了findOneAndUpdate。這就是爲什麼findAndModify不適用於Mongoose。

至於哪一個更好,在findOneAndUpdate中可以傳遞包含多個字段的查詢對象。 findByIdAndUpdate只將id作爲第一個參數。

+0

感謝塔爾哈 - 我會嘗試findByIdAndUpdate,看看它是否會工作。 – torbenrudgaard

+0

https://docs.mongodb.com/manual/search/?query=findByIdAndUpdate haha​​ha我猜他們忘了把它放在他們的手冊中:-D – torbenrudgaard

+1

不,他們沒有:) findByIdAndUpdate不是mongoDB的一部分。它是貓鼬的。 –