【问题标题】:MongoDB does not search for documentsMongoDB 不搜索文档
【发布时间】:2017-12-15 20:52:28
【问题描述】:

但我在 ID 之后找不到任何项目,

Calendar.model 里面是 doc:

/* 1 */
{
    "_id" : ObjectId("5a3425b58399c6c26cf1c848"),
    "doctorID" : ObjectId("5a31392cc99fe923c0810096"),
    "doctor" : "Bartłomiej Flis",
    "calendar" : []
}

在 nodeJS API 中,我正在尝试使用函数查找文档:

router.get('/list-of-dates', (req, res)=> {

Calendar.find({ doctorID : req.query.doctorID})
.then((Calendar)=>{
    console.log(Calendar)
    res.send(Calendar)
})
.catch((err)=>{
    console.log(err)
})

});

req.query.doctorID 的值为字符串 -> 5a31392cc99fe923c0810096

谁能告诉我为什么这个函数找不到任何项目?我认为是数据库变量医生ID 为ObjectId 而API 中req.query.doctorID 是字符串的错误,如何在API 中改进它才能工作。

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    首先,在文件开头导入以下内容:

    const ObjectID = require('mongodb').ObjectId;
    

    然后,将您的搜索查询更改为(即将其包装到 ObjectId() 函数中)

    { doctorID: ObjectId( req.query.doctorID ) }
    

    有什么区别? MongoDB 将键存储在 ObjectId 类型中,而您尝试查找类型为 String 的内容。你是对的。这就是为什么你什么也得不到。

    如果有帮助,请告诉我。

    【讨论】:

    • 好的,但是在回调中我得到空数组,也许你知道我为什么没有找到这个文档?
    • 您的文档可能是空的?另外,不要使用(Calendar) => ...,而是简单地使用(calendars) => ...,因为大写字母单词用于类型(BooleanString 等)
    • 你能看看这里吗?我认为与集合有关,因为我更改了 find 以进行保存,当我尝试这样做时,Calendar 不是构造函数的错误,你可以看看这里吗? gist.github.com/anonymous/7ae2796a51c2a28f88469415054f7a31 并感谢您提供有关大写字母的信息
    • 1.将架构中doctorID 的类型从 String 更改为 ObjectID 2. 将以下内容添加到文件的开头(在var mongoose... 之后)var ObjectID = mongoose.Types.ObjectId;
    • 另一个问题在这里function (Calendars)。不要使用大写字母 params/args 等。它们仅适用于 String 等类型!!相反,请将其更改为 function (calendars) 或其他,但请确保它是小写的。
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多