ネストされた配列内のデータを除外しようとしています。私のデータは以下のようなものです:
{
"_id" : ObjectId("5836afca6dbd62de8d654h9"),
"name" : "First Test Event",
"registered_users" : [
{
"user_id" : ObjectId("5836e433e17ea92ea7a499a5"),
"user_name" : "Malavika",
"user_state" : "registered"
},
{
"user_id" : ObjectId("5836e433e17ea92ea7a455b5"),
"user_name" : "Piyush",
"user_state" : "joined"
},
{
"user_id" : ObjectId("58369783e17e6e63c35f36ac"),
"user_name" : "Jingi",
"user_state" : "notified"
}
]
},
{
"_id" : ObjectId("5836afca6dbd62de8d622b3"),
"name" : "Test Event",
"registered_users" : [
{
"user_id" : ObjectId("5836e433e17ea92ea7a499a5"),
"user_name" : "Malavika",
"user_state" : "registered"
},
{
"user_id" : ObjectId("5836e433e17ea92ea7a455b5"),
"user_name" : "Piyush",
"user_state" : "left"
},
{
"user_id" : ObjectId("58369783e17e6e63c35f36ac"),
"user_name" : "Jingi",
"user_state" : "notified"
}
]
}
上記のコレクションで、最初のイベント「First Test Event」の「registered_users」のみを「登録済み、参加済み」の 2 つの状態で取得したいと考えています。
私の意図した結果は次のようになります。
{
"registered_users" : [
{
"user_id" : ObjectId("5836e433e17ea92ea7a499a5"),
"user_name" : "Malavika",
"user_state" : "registered"
},
{
"user_id" : ObjectId("58369783e17e6e63c35f36ac"),
"user_name" : "Piyush",
"user_state" : "joined"
}
]
}
そこで、以下のようなクエリを用意しました。
db.events.aggregate([
{$match: {'registered_users.user_state': 'registered', "_id": ObjectId("5836afca6dbd62de8d654h9")}},
{$project: {
registered_users: {$filter: {
input: '$registered_users',
as: 'register',
cond: {$eq: ['$$register.user_state', 'registered']}
}},
_id: 0,
name: 0
}}
])
上記のクエリの問題は、1 つの状態「登録済み」ではなく、「登録済み」、「結合済み」、「左」などの複数の状態に対して $in 演算子が必要なことです。
誰でもこれを手伝ってもらえますか?