如果找不到_id,则会发出mongoose回调结果

时间:2017-01-22 14:31:42

标签: javascript node.js mongodb mongoose mongoose-schema

我正在寻找关于如果由于找不到对象_id而导致操作失败的mongoose回调获取的参数的文档。我找不到任何东西。因此我自己比较了三个案例。使用id = 'foofoofoofoo'调用时会发生以下情况:

// returns: err = null, obj = null
mySchema.statics.findById = function(id, cb) {
  this.findOne({ _id: new ObjectId(id) }, cb);
}

// returns: err = null, obj is a cursor with obj.result = { n: 0, ok: 1 }
mySchema.statics.deleteById = function(id, cb) {
  this.remove({ _id: new ObjectId(id) }, cb);
}

// returns: err = null, obj is an Object with obj = { n: 0, nModified: 0, ok: 1 }
mySchema.statics.updateById = function(id, updObj, cb) {
  this.where({ _id: new ObjectId(id) }).update(updObj, cb);
}

这个imho是一个可怕的结果。我在cb中得到了三个完全不同的类型作为第二个参数:a null,一个游标和一个简单的对象。甚至cursor.result都不等于结构中的“简单对象”。

我的问题是:

  1. 我在这里使用了一些反模式/混合语法会导致这种不一致的结果吗?
  2. 在哪里可以找到有关在不同情况下调用mongoose回调的结果的详细信息?

1 个答案:

答案 0 :(得分:1)

回调函数中的第二个参数result会有所不同,这取决于操作。查看更多详情here

  

在Mongoose中将回调传递给查询的任何地方,回调都遵循模式callback(error, results)results取决于操作:

     
      
  • 对于findOne(),它是可能为空的单个文档
  •   
  • find() 文件清单
  •   
  • count() 文件数量
  •   
  • update() 受影响的文档数量
  •   
     

API docs for Models提供了有关传递给回调的内容的更多详细信息。

希望得到这个帮助。