传递给Mongoose回调的参数是什么

时间:2015-04-10 09:54:11

标签: node.js mongodb mongoose

mongoose documentation中,它经常列出某些查询运算符(如findOneAndUpdate)的可选回调,但是,它没有提到回调所采用的参数(参数)。他们是什么,我怎么知道?

此外,如果conditionsupdate等是可选的,并且我想在结尾处指定回调,我是否必须传入null值或空对象或者我可以只指定回调 - 而且Mongoose知道软管吗?

Model.findOneAndUpdate([conditions], [update], [options], [callback])

3 个答案:

答案 0 :(得分:9)

对于几乎所有mongoose queries,所提供的callback函数将使用node callback pattern callback(err, results)中的两个参数进行调用,如文档中所述:

  

在Mongoose中将回调传递给查询的任何地方,回调都遵循模式callback(error, results)。结果取决于操作:对于findOne(),它是potentially-null single documentfind()list of documentscount() number of documents,{{1 } number of documents affected等。API docs for Models提供了有关传递给回调的内容的更多详细信息。

答案 1 :(得分:2)

默认情况下,您可以在回调函数中获取两个参数: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参数包含更新的结果,如下所示:

"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