0

配列内の複数のフィールドを照会する方法 (例: $elemMatch ) を教えてください。また、並べ替えを適用する方法があります。l 内の複数のフィールドを照会すると無視されます。

ドキュメントは ts: -1 ソート順で返されません - 1 つの配列フィールドをクエリすると正常に動作します。スキップと制限は、期待どおりに並べ替えに影響しません。

サンプルクエリ

db.transactions.find({ 'l.id': '5612087d70634d009dd919e5bb07fdad', 'l.t': 'organization'  } ).sort({ ts: -1 }.skip(0).limit(10).toArray()
db.transactions.find({ l: { $elemMatch: { id: '5612087d70634d009dd919e5bb07fdad', t: 'organization' }  } } ).sort({ ts: -1 }.skip(0).limit(10).toArray()

この集計は機能しますが、l の残りの内容は失われます

db.transactions.aggregate({$unwind:"$l"},{$match:{"l.t":"organization", "l.id":"5612087d70634d009dd919e5bb07fdad"}}, {$sort:{"ts":-1}})

サンプルデータ - この質問の要因ではなく、重複した ID を無視してください。

    [
    {
            "t" : "organization.save",
            "d" : {
                    "new" : false,
                    "id" : "5612087d70634d009dd919e5bb07fdad"
            },
            "ts" : ISODate("2013-08-20T02:21:39.955Z"),
            "l" : [
                    {
                            "t" : "organization",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    },
                    {
                            "t" : "account",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    }
            ],
            "_id" : "95c6cd5310aa485582312319f74775a4",
            "__v" : 0
    },
    {
            "t" : "organization.save",
            "d" : {
                    "new" : false,
                    "id" : "5612087d70634d009dd919e5bb07fdad"
            },
            "ts" : ISODate("2013-08-20T02:21:43.121Z"),
            "l" : [
                    {
                            "t" : "organization",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    },
                    {
                            "t" : "account",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    }
            ],
            "_id" : "d6434c3e9a1743afaa6c0961b5a69f70",
            "__v" : 0
    }
    ]

編集:起動して実行するために、t + ':' + id の複合フィールドを作成しました。これで今のところソートの問題は解決しましたが、データが二重になるため理想的ではありません。

4

0 に答える 0