#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