【发布时间】:2019-04-17 17:04:48
【问题描述】:
我有两个集合:games 和 questions
game 架构:
{
_id: ObjectId,
status: 'played',
questions:
[
{ questionId: ObjectId(questions._id) } // ref to questions collection by _id field
]
}
questions 架构:
{
_id: ObjectId(),
text: foobar
}
游戏可能有两种状态:“活跃”和“已玩”。
我的目标是获取与状态为“已玩”的游戏相关的所有“已玩”问题、方法、问题。
我已尝试对 games 集合进行查询,尝试对 questions 进行查询,但均无效。
其中一些是:
db.games.aggregate([
{$match: {status: {$ne: 'played'}}},
{
$lookup:
{
from: 'questions',
localField: 'questions.questionId',
foreignField: '_id',
as: 'game_questions'
}
},
{$project: {game_questions: 1}},
{$unwind: {path: '$game_questions', preserveNullAndEmptyArrays: false}}
])
或者
db.questions.aggregate([
{ $project: {text: 1}},
{ $lookup: {
from: 'games',
pipeline: [
{ $match: {status:'played' }},
{ $project: { status: 1 }}
],
as: 'game_data'
}}
])
底线: 在提出请求后,我想获得一个包含问题的列表,其中游戏状态为“已玩”。
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework