从Mongodb中检索一个元素

时间:2016-10-18 11:23:39

标签: javascript node.js mongodb mongoose mongodb-query

我试图根据它的ID从类集合中检索一个课程。我从以前的答案中总结了以下内容,但它并没有返回任何内容。有人能指出我正确的方向吗?

我的代码

Class.aggregate([
    {$match: {'lessons._id': id}},
    {$project: {
        lessons: {$filter: {
            input: '$lessons',
            as: 'lesson',
            cond: {$eq: ['$$lesson._id', id]}
        }},
        _id: 0
    }}
])

实施例

{
    "_id" : ObjectId("14354"),
    "title" : "Easy Math",
    "instructor_id" : "2454",
    "lessons" : [
        {
            "lesson_body" : "2 + 2 = 4",
            "lesson_title" : "Addition",
            "_id" : ObjectId("3456")
        },
        {
            "lesson_body" : "4 - 2 = 2",
            "lesson_title" : "Subtraction",
            "_id" : ObjectId("4456")
        }
    ],
    "__v" : 0
}
{
    "_id" : ObjectId("5345"),
    "title" : "Harder Math",
    "instructor_id" : "6345",
    "lessons" : [
        {
            "lesson_body" : "2 * 2 = 4",
            "lesson_title" : "Multiplication",
            "_id" : ObjectId("7454")
        }
    ],
    "__v" : 0
}

3 个答案:

答案 0 :(得分:1)

不应该是lessons而不是lesson

在这一行: cond: {$eq: ['$$lessons._id', id]}

答案 1 :(得分:0)

希望这会对你有所帮助:

db.COLLECTION_NAME.find({ lessons: { $elemMatch: { "_id" : ObjectId("3456")} } })

答案 2 :(得分:0)

我不完全确定,但请记住有类似的问题。另外我觉得你的语法看起来有些奇怪?尝试适应这一点,这就是我应该学会它应该至少看看:

var objectId = require('mongodb').ObjectID;

然后当你尝试通过ID获取对象时:

db.collection("classes").findOne({"_id": new ObjectID(id)}

欢迎在这里找到灵感:github repository