MongoDB 通过 Mongoose JS - findByID 是啥?
Posted
技术标签:
【中文标题】MongoDB 通过 Mongoose JS - findByID 是啥?【英文标题】:MongoDB via Mongoose JS - What is findByID?MongoDB 通过 Mongoose JS - findByID 是什么? 【发布时间】:2012-09-11 02:35:31 【问题描述】:我正在用 ExpressJS、PassportJS、MongoDB 和 MongooseJS 编写一个 NodeJS 服务器。我只是设法让 PassportJS 使用通过 Mongoose 获得的用户数据进行身份验证。
但要使其正常工作,我必须使用如下所示的“findById”函数。
var UserModel = db.model('User',UserSchema);
UserModel.findById(id, function (err, user) < SOME CODE > );
UserModel
是 Mongoose 模型。我之前声明了架构UserSchema
。所以我猜UserModel.findById()
是Mongoose模型的一种方法?
问题
findById
是做什么的,是否有相关文档?我用谷歌搜索了一下,但没有找到任何东西。
【问题讨论】:
【参考方案1】:findById
是 Mongoose 提供的模型上的一种便捷方法,用于通过其 _id 查找文档。它的文档可以在here找到。
例子:
// Search by ObjectId
var id = "56e6dd2eb4494ed008d595bd";
UserModel.findById(id, function (err, user) ... );
功能上和调用是一样的:
UserModel.findOne(_id: id, function (err, user) ... );
请注意,Mongoose 会将提供的 id
值转换为架构中定义的 _id
类型(默认为 ObjectId)。
【讨论】:
id的数据类型是什么?是字符串还是 ObjectId? @bubakazoubaid
将被转换为架构中定义的 _id
的任何类型(默认为 ObjectId
)。
有人知道是否还有 removeById 便捷方法吗?
@AlexanderMills 有。它被称为findByIdAndRemove
【参考方案2】:
如果 id 的模式不是 ObjectId 类型,则不能使用函数操作: findbyId()
【讨论】:
【参考方案3】:与 find() 可以返回 1 个或多个文档相反, findById() 只能返回 0 或 1 个文档。 可以将文档视为记录。
【讨论】:
【参考方案4】:我是 Mongoose 的维护者。 findById()
是 Mongoose 模型的内置方法。 findById(id)
等价于findOne( _id: id )
,有一个警告:findById()
with 0 params 等价于findOne( _id: null )
。
您可以阅读有关findById()
on the Mongoose docs 和this findById()
tutorial 的更多信息。
【讨论】:
我收到以下错误: "message": "Cast to ObjectId failed for value \" id: '5d9a3b073f308e32b47a5cbb' \" at path \"_id\" for model \"Categories\"", "name": "CastError", "stringValue": "\" id: '5d9a3b073f308e32b47a5cbb' \"", "kind": "ObjectId", "value": "id": "5d9a3b073f308e32b47a5cbb" , "path": "_id"
看起来您正在传递一个具有id
属性的对象,而不是字符串或 ObjectId 实例。尝试打印出 typeof val
和 val.constructor.name
以检查您实际传递给 findById()
的类型
我尝试了很多组合。或者我可以说,所有的组合。我没有名为id
的属性。我没有ObjectId
类型的属性。
好的。发现了我的错误。这是一个愚蠢的。我将 id 对象作为 id: 'blablabla' 而不是字符串传递...
@vkarpov15 我在哪里可以找到这个findById
的来源?以上是关于MongoDB 通过 Mongoose JS - findByID 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js /Express 和 mongoose:通过自动拉取新数据建立“可观察”的 mongodb 连接?