3

次のようなドキュメントのコレクションがあるとします。

{
    "_id": ObjectId("507f191e810c19729de860ea"),
    "users": [{
        "userId": ObjectId("507f1f77bcf86cd799439011"),
        "deleted": false,
        "updatedAt" ISODate("2013-10-17T20:46:22Z")
    }, {
        "userId": ObjectId("507f1f71baf40ea8438490fa"),
        "deleted": false,
        "updatedAt" ISODate("2013-10-17T22:19:10Z")
    }]
}

ここで、削除されていない特定の userId を含む「users」サブドキュメントを持つドキュメントをクエリしているとします。つまり、クエリは次のようになります。

{"users.userId": ObjectId("507f1f77bcf86cd799439011"), "users.deleted": false}

返された結果セットをupdatedAt、行内の一致したサブドキュメントの属性で並べ替えることができますか? そうでない場合、これを設定するより適切な方法はありますか? 現在キーに埋め込んでいるものの別のコレクションを作成しusers、それで親ドキュメントを参照する必要がありますか?

4

1 に答える 1

1

はい、可能です。これを試すことができます:

 db.collection.aggregate([
 {$unwind:"$users"},
 {$match:{"users.userId":"ObjectId("507f1f77bcf86cd799439011")","users.deleted":false}},
 {$sort:{"users.updatedAt":1}}])

ここで「コレクション」はコレクションの名前に置き換えます。

于 2013-10-14T08:50:03.527 に答える