在mongoose documentation中,它经常列出某些查询运算符(如findOneAndUpdate
)的可选回调,但是,它没有提到回调所采用的参数(参数)。他们是什么,我怎么知道?
此外,如果conditions
,update
等是可选的,并且我想在结尾处指定回调,我是否必须传入null
值或空对象或者我可以只指定回调 - 而且Mongoose知道软管吗?
Model.findOneAndUpdate([conditions], [update], [options], [callback])
答案 0 :(得分:9)
对于几乎所有mongoose queries,所提供的callback
函数将使用node callback pattern callback(err, results)
中的两个参数进行调用,如文档中所述:
在Mongoose中将回调传递给查询的任何地方,回调都遵循模式
callback(error, results)
。结果取决于操作:对于findOne()
,它是potentially-null single document,find()
和list of documents,count()
number of documents,{{1 } number of documents affected等。API docs for Models提供了有关传递给回调的内容的更多详细信息。
答案 1 :(得分:2)
默认情况下,您可以在回调函数中获取两个参数:err
和results
。第一个包含运行时期间发生的任何错误,第二个包含旧文档值。但是,如果在findOneAndUpdate
方法中设置了一些选项,则可以在回调参数中获取其他变量。让我们看一个例子:
Model.findOneAndUpdate(
{ id: id_var },
{ $set: { name: name_var } },
{new: true, passRawResult: true},
(err, doc, raw) => { /*Do something here*/ })
在这种情况下,new: true
选项表示doc变量包含新更新的对象。 passRawResult: true
选项表示您可以将MongoDB驱动程序的原始结果作为第三个回调参数。 raw参数包含更新的结果,如下所示:
"raw": {
"lastErrorObject": {
"updatedExisting": true,
"n": 1
},
"value": { /*the result object goes here*/},
"ok": 1,
"_kareemIgnore": true
}
答案 2 :(得分:1)
根据官方的mongoose文档,您可以像这样调用findOneAndUpdate
query.findOneAndUpdate(conditions, update, options, callback) // executes
query.findOneAndUpdate(conditions, update, options) // returns Query
query.findOneAndUpdate(conditions, update, callback) // executes
query.findOneAndUpdate(conditions, update) // returns Query
query.findOneAndUpdate(update, callback) // returns Query
query.findOneAndUpdate(update) // returns Query
query.findOneAndUpdate(callback) // executes
query.findOneAndUpdate() // returns Query
所以你可以传递你的回调,不需要为其他参数传递null
http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate