我正在做我的一个项目,遇到了这个,这让我有点困惑。 我想了解如果两者都会给出相同的输出(如果是的话)为什么?
async getHistory( historyId: string) {
const { historyId } = query;
var history = await HistoryModel.findById(historyId);
//what will happen if i do like this.
var history = await HistoryModel.findById({_id:hisotryId})
if (!history) {
throw new Error(400, ` not found`, ` not found`)
}
return history;
}
第二次调用
findById
是错误的。 Mongoose 的 findById
采用单个 ID,而不是对象。
第二个电话可能意味着使用
findOne
。
在这种情况下,HistoryModel.findOne({ _id: historyId })
与 HistoryModel.findById(historyId)
执行相同的操作,但有下面提到的小警告。
您可以在文档中找到更多信息:
[findById] 通过
字段查找单个文档。_id
几乎*等同于findById(id)
。如果您想通过文档的findOne({ _id: id })
进行查询,请使用_id
而不是findById()
。findOne()
除了它如何对待*
。如果您使用undefined
,您会看到findOne()
和findOne(undefined)
相当于findOne({ _id: undefined })
并返回任意文档。然而,猫鼬将findOne({})
翻译成findById(undefined)
。findOne({ _id: null })
(https://mongoosejs.com/docs/api/model.html#Model.findById())