【问题标题】:mongoose callback results if _id not found如果 _id 未找到,猫鼬回调结果
【发布时间】:2017-03-04 06:23:34
【问题描述】:

我正在寻找有关如果由于找不到对象_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);
}

这个恕我直言是一个可怕的结果。我得到三种完全不同的类型作为cb 中的第二个参数:null、光标和简单对象。甚至cursor.result 也不等于结构中的“简单对象”。

我的问题是:

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

希望对您有所帮助。

【讨论】:

  • 感谢您提供链接和报价 - 不幸的是,根据我的实验,这不是返回的内容,例如“update”返回{ n: 0, nModified: 0, ok: 1 },而“remove”返回一个游标。我会对此表示赞成,但不能使其成为公认的答案。
猜你喜欢
  • 2022-01-23
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2020-12-16
  • 2015-08-26
  • 2021-04-18
相关资源
最近更新 更多