mongodbで検索した後にネストされたプロパティをフィルタリングしたいと思います。私は文書化に適切な例を見つけることができません。私は集約を使用し、最後の段階ではいくつかの条件を満たす必要があります。ルックアップステージで強化されたプロパティでフィルタリングしたいMongoDbでjoin後にmatchを使用するには?
これが私のクエリです:
db.collection('leagues').aggregate([
{
$match: {
_id: ObjectID(leagueId)
}
},
{
$lookup: {
from: "league_configs",
localField: "_id",
foreignField: "leagueId",
as: "configs"
}
},
{
$lookup: {
from: "events",
localField: "_id",
foreignField: "leagueId",
as: "events"
}
},
{
$match: {
$and: [{
"events": {
"isCalculated": {
$eq: false
},
"isDeleted": {
$eq: false
},
"startDate": {
$lte: new Date()
}
},
}]
}
}
])
例リーグオブジェクト:
{
"_id" : ObjectId("57c6bf5934db7e18b8af650c"),
"name" : "League1",
"adminId" : ObjectId("57c5a08b8857ad1da099e8de"),
"isStarted" : false,
"isFinished" : false,
"users" : [
ObjectId("57c5a08b8857ad1da099e8de")
],
"isPublic" : true,
"createdDate" : "2016-08-31T13:28:25+02:00",
"updatedDate" : ISODate("2016-08-31T12:28:09.064Z"),
"currentStage" : 1,
"isDeleted" : false
}
例イベントオブジェクト:
{
"_id" : ObjectId("57c6bfca34db7e18b8af650f"),
"home" : "home",
"guest" : "guest",
"description" : null,
"result" : "X",
"resultHome" : 1,
"resultGuest" : 1,
"startDate" : ISODate("2016-08-31T18:30:00.000Z"),
"type" : "1",
"specialPoints" : null,
"leagueStage" : 1,
"isDeleted" : false,
"isCalculated" : false,
"leagueId" : ObjectId("57c6bf5934db7e18b8af650c"),
"updatedDate" : ISODate("2016-09-02T06:52:45.544Z")
}
任意のアドバイス?
leagueとleague_configsコレクションのサンプルドキュメントを追加してください。 – notionquest
さて、分で。しかし、あなたはリーグと出来事を意味しますか?なぜleague_configsですか? – magos
はい、イベント収集です。そのコレクションから参照したいネストされた属性を例として指定してください。 – notionquest