0

私のデータはこの構造を持っています:

{
    "user": {
        "name":"John",
        "sports":[
            {"sId":"sport1","name":"basketball"},
            {"sId":"sport2",{"name":"tennis"},
            {"sId":"sport3","name":"surf"}, ...
            {"sId":"sportN","name":"golf"}
        ],
        "birthDate":"25/07/1960"
    }
}

同じユーザーを取得するためにフィルタリングしたいのですが、次のように最初の 2 つのスポーツのみを使用します。

{
    "user": {
        "name":"John",
        "sports":[
            {"sId":"sport1","name":"basketball"},
            {"sId":"sport2","name":"tennis"}
        ],
        "birthDate":"25/07/1960"
    }
}

そして、次の 2 つ、...

{
    "user": {
        "name":"John",
         "sports":[
            {"sId":"sport3","name":"surf"},
            {"sId":"sport4","name":"icehockey"}
        ],
        "birthDate":"25/07/1960"
    }
}

など

しかし、ユーザー全体を取得せずにmongoでクエリを実行する方法がわかりません

どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

1

別の方法として、後で結果をグループ化して、2 つのスポーツを通常の形式に戻すこともできます。

db.so.aggregate(
    {$match : {'user.name':'John'}},
    {$unwind : '$user.sports'},
    {$skip: 0},
    {$limit : 2},
    {$group: {
        _id: '$_id', 
        name: { $first: '$user.name' }, 
        sports: { $push: '$user.sports' }, 
        birthDate: { $first: '$user.birthDate' }
    } }
);

次に出力します:

{
    "result" : [
        {
            "_id" : ObjectId("51c71c8d4a01738f3eac69fc"),
            "name" : "John",
            "sports" : [
            {
                    "sId" : "sport1",
                    "name" : "basketball"
                },
                {
                    "sId" : "sport2",
                    "name" : "tennis"
                }
            ],
            "birthDate" : "25/07/1960"
        }
    ],
    "ok" : 1
}
于 2013-06-23T16:10:11.307 に答える