3

私の MongoDB データベースには、製品のコレクションがあります。各製品には、配列にリリース情報が含まれています。

{
  "name" : "foo",
  "release" : [{
      "region" : "GB",
      "active" : "Y",
      "date" : ISODate("2012-03-01T00:00:00Z")
    }, {
      "region" : "US",
      "active" : "Y",
      "date" : ISODate("2012-09-01T00:00:00Z")
    }, {
      "region" : "FR",
      "active" : "N",
      "date" : ISODate("2010-01-01T00:00:00Z")
    }]
}

GB 地域でアクティブなリリースが行われているすべての製品を検索し、結果を GB のリリース日で並べ替えたいと考えています。

私はこれを使用してこれをやろうとしました:

db.product.find(
  { "release" : { "$elemMatch" : { "region" : "GB", "active" : "Y" } } }
).sort({ "release.date" : 1 });

これは正しい製品を見つけますが、一致した要素からリリース日でソートしません (代わりに、配列から最小リリース日でソートします)。

ここまで読んだところ、マッチした要素のプロパティによるソートはできないようですが、これでよろしいでしょうか?

集約フレームワークでそれを行うことはできますか?

4

1 に答える 1

6

必要なものを取得するために実行できる集計は次のとおりです。

db.release.aggregate([
         {$unwind:"$release"},
         {$match:{"release.active":"Y", "release.region":"GB"}},
         {$sort:{"release.date":1}}
])

これにより、リリースアレイが巻き戻され、条件に従ってドキュメントが照合され、選択したドキュメントがリリース日に並べ替えられます。

于 2013-02-28T20:17:06.497 に答える