Mongoose回调函数传递了哪些参数

14
Mongoose文档中,它经常为某些查询运算符(如findOneAndUpdate)列出了一个可选的回调函数,然而,它没有提到回调函数需要哪些参数。这些参数是什么,我该如何找出?
另外,如果conditionsupdate等都是可选的,而我想在最后指定一个回调函数,我需要传入null值、空对象还是只需指定回调函数--Mongoose如何知道呢? Model.findOneAndUpdate([conditions], [update], [options], [callback])

我不确定。但是以下可能对你有用。 https://dev59.com/RW_Xa4cB1Zd3GeqPz1Q1 - Mithun Sen
3个回答

15

对于几乎所有的mongoose查询,提供的callback函数将按照node回调模式callback(err, results)中所述的文档被调用,并传递两个参数。

在Mongoose中,无论何时将回调传递给查询,回调都遵循模式callback(error, results)。结果取决于操作:对于findOne(),它是一个可能为null的单个文档,对于find(),它是一个文档列表,对于count(),它是文档数量,对于update(),它是受影响的文档数量等。Models的API文档提供了有关传递给回调的详细信息。

4

默认情况下,您可以在回调函数中获取两个参数: errresults。第一个参数包含运行时发生的任何错误,而第二个参数具有文档的旧值。但是,如果在 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": {
    "lastErrorObject": {
      "updatedExisting": true,
      "n": 1
    },
    "value": { /*the result object goes here*/},
    "ok": 1,
    "_kareemIgnore": true
}

3
根据官方的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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接