Извлечение только элемента из MongoDB

#javascript #node.js #mongodb #mongoose #mongodb-query

#JavaScript #node.js #MongoDB #Мангуст #MongoDB-запрос

Вопрос:

Я пытаюсь извлечь только урок из коллекции классов на основе его идентификатора. Я собрал следующее из предыдущих ответов, но оно ничего не возвращает. Может кто-нибудь указать мне правильное направление?

Мой код

 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
}
  

Ответ №1:

Разве это не должно быть lessons вместо lesson

в этой строке : cond: {$eq: ['$$lessons._id', id]}

Ответ №2:

Надеюсь, это поможет вам:

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

Ответ №3:

Я не совсем уверен, но помню, что у меня были похожие проблемы. Также я думаю, что ваш синтаксис выглядит несколько странно? Попытайтесь адаптироваться к этому, вот как я узнал, что это должно выглядеть по крайней мере:

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

А затем, когда вы пытаетесь получить объект по идентификатору:

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

Не стесняйтесь искать вдохновение здесь: репозиторий GitHub