首先 , 哪 一 个 最 好 ? findAndModify
、 findOneAndUpdate
还是 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);
};
});
})};
格式
2条答案
按热度按时间wn9m85ua1#
Mongoose有
findOneAndUpdate
(相当于mongoBD的findAndModify。MongoDB在3.2版本中也引入了findOneAndUpdate)和findByIdAndUpdate
。这就是为什么findAndModify
不能与Mongoose一起工作的原因。至于哪一个更好,在findOneAndUpdate中可以传递包含多个字段的查询对象,而findByIdAndUpdate只取id作为第一个参数。
rhfm7lfc2#
findAndModify
是MongoDB的一个函数,这就是为什么Mongoose不能使用它的原因。findOneAndUpdate
和findByIdAndUpdate
都可以很好地与Mongoose一起工作,如果您希望使用_id在数据库中搜索,则可以使用findByIdAndUpdate
,否则如果您使用不同的字段在数据库中搜索,则可以使用findOneAndUpdate
。但是,如果您尝试在MongoDB中使用
findAndModify
,则可能会收到以下警告:若要消除这种情况,请在程式码中使用下列程式码:
以防万一,
findByIdAndUpdate
和findOneAndUpdate
之间的区别:findByIdAndUpdate(id,...)等效于findOneAndUpdate({ _id:ID },...)