检索只是一个元素从Mongodb

Retrieve Just A Element From Mongodb

本文关键字:一个 元素 Mongodb 检索      更新时间:2023-09-26

我正试图根据它的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
}

应该是lessons而不是lesson

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

希望对你有所帮助:

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

我不完全确定,但记得有类似的问题。我还觉得你的语法看起来有点奇怪?试着适应这个,这是我学到的至少应该是这样的:

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

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

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

可以在这里找到灵感:github repository