tor*_*ard 3 mongoose mongodb node.js
首先,哪一个最好?
findAndModify或findOneAndUpdate或findByIdAndUpdate?
在我的情况下,我有一个这样的表:
seqkeys
{
"_id" : "invoice",
"seq" : NumberInt(1)
},
{
"_id" : "receipt",
"seq" : NumberInt(1)
}
Run Code Online (Sandbox Code Playgroud)
我想找到发票的序号,加1并保存.(然后使用该编号将实际发票记录保存在发票表中)
但我不能让这个工作,我不断得到
TypeError: seqkeysTable.findAndModify is not a function
Run Code Online (Sandbox Code Playgroud)
所以这是我的模型:
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');
Run Code Online (Sandbox Code Playgroud)
这是我的findkeynodejs函数....
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);
};
});
})};
Run Code Online (Sandbox Code Playgroud)
Mongoose有findOneAndUpdate(相当于mongoBD findAndModify .MongoDB也在版本> = 3.2中引入了findOneAndUpdate)和findByIdAndUpdate.这就是为什么findAndModify不能与Mongoose一起使用的原因.
至于哪一个更好,在findOneAndUpdate中,您可以传递包含多个字段的查询对象.findByIdAndUpdate仅将id作为第一个参数.
findAndModify是 MongoDB 的一个函数,这就是为什么它不适用于 Mongoose。
和findOneAndUpdate都findByIdAndUpdate与 Mongoose 配合得很好,也许如果您希望使用 _id 在数据库中搜索,那么请使用findByIdAndUpdateelse 如果您使用不同的字段在数据库中搜索,则使用findOneAndUpdate.
但是,如果您尝试在 MongoDB 中使用findAndModify,您可能会收到以下警告:
DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
Run Code Online (Sandbox Code Playgroud)
要消除这种情况,请在代码中使用以下内容:
mongoose.set('useFindAndModify', false);
Run Code Online (Sandbox Code Playgroud)
以防万一,findByIdAndUpdate&之间的区别findOneAndUpdate:
findByIdAndUpdate(id, ...) 相当于 findOneAndUpdate({ _id: id }, ...)
| 归档时间: |
|
| 查看次数: |
7958 次 |
| 最近记录: |