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? @bubakazouba id 将被转换为架构中定义的 _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 valval.constructor.name 以检查您实际传递给 findById() 的类型 我尝试了很多组合。或者我可以说,所有的组合。我没有名为id 的属性。我没有ObjectId 类型的属性。 好的。发现了我的错误。这是一个愚蠢的。我将 id 对象作为 id: 'blablabla' 而不是字符串传递... @vkarpov15 我在哪里可以找到这个findById 的来源?

以上是关于MongoDB 通过 Mongoose JS - findByID 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js /Express 和 mongoose:通过自动拉取新数据建立“可观察”的 mongodb 连接?

node 通过mongoose实现 mongodb的增删改

如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?

通过node.js从mongodb获取数据

通过node.js从mongodb获取数据

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段