通过Mongoose JS的MongoDB-什么是findByID?


70

我正在用ExpressJS,PassportJS,MongoDB和MongooseJS编写NodeJS服务器。我只是设法让PassportJS使用通过Mongoose获得的用户数据进行身份验证。

但是要使其正常工作,我必须使用如下所示的“ findById”函数。

var UserModel = db.model('User',UserSchema);

UserModel.findById(id, function (err, user) { < SOME CODE > } );

UserModel是猫鼬的模型。我UserSchema早先声明了架构。所以我想这UserModel.findById()是猫鼬模型的一种方法吗?

该怎么findById办,上面有文档吗?我在谷歌上搜索了一下,但没有找到任何东西。

Answers:


139

findById是Mongoose提供的模型上的一种便捷方法,可通过其_id查找文档。它的文档可以在这里找到。

例:

// Search by ObjectId
var id = "56e6dd2eb4494ed008d595bd";
UserModel.findById(id, function (err, user) { ... } );

从功能上讲,它与调用相同:

UserModel.findOne({_id: id}, function (err, user) { ... });

请注意,Mongoose将提供的id值转换_id为架构中定义的类型(默认为ObjectId)。


1
id的数据类型是什么?是字符串还是ObjectId?
bubakazouba

2
@bubakazoubaid将强制转换_id为架构中定义的任何类型(默认为ObjectId)。
JohnnyHK

有人知道是否还有removeById便捷方法吗?
亚历山大·米尔斯

4
@AlexanderMills有。它被称为findByIdAndRemove
Babalola Rotimi

9

如果id的模式不是ObjectId类型,则不能使用function: findbyId()



4

我是猫鼬的维护者。findById()是Mongoose模型上的内置方法。findById(id)等效于findOne({ _id: id }),只有一个警告:findById()参数0等于findOne({ _id: null })

您可以阅读有关findById()Mongoose文档findById()教程的更多信息。


我收到以下错误:{ "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" }
Jasim Khan Afridi

1
看起来您要传递的是带有id属性的对象,而不是字符串或ObjectId实例。尝试打印typeof valval.constructor.name检查您实际传递给的类型findById()
vkarpov15 '19

我尝试了很多组合。或者我可以说所有组合。我没有名为的属性id。我没有type的属性ObjectId
Jasim Khan Afridi

好。发现我的错误。这是一个愚蠢的。我将id对象传递为{id:'blablabla'}而不是字符串...
Jasim Khan Afridi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.