0

ネストされた配列内のデータを除外しようとしています。私のデータは以下のようなものです:

{
    "_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 演算子が必要なことです。

誰でもこれを手伝ってもらえますか?

4

0 に答える 0