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