【问题标题】: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 是做什么的,是否有相关文档?我用谷歌搜索了一下,但没有找到任何东西。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案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 docsthis 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 的来源?
        猜你喜欢
        • 1970-01-01
        • 2015-05-26
        • 2018-09-16
        • 2018-06-11
        • 2014-11-09
        • 2018-06-15
        • 2013-04-02
        • 2019-07-15
        • 2017-10-13
        相关资源
        最近更新 更多