23

オブジェクトのネストされた配列をソートする方法を探しています。

次に例を示します。

{
  answers : [
    { name : 'paul',  state : 'RU' },
    { name : 'steve', state : 'US' }, 
    { name : 'mike',  state : 'DE' }, 
    ...
  ]
}

nameここで、配列の , をすべて見つけたいとしますがanswers、それらを昇順で並べ替えるにはどうすればよいでしょうか?

4

5 に答える 5

35

私はあなたがそれを取り戻したい順序でそれを保管します。または、クライアント側で、引き出した後に並べ替えます。

どちらも不可能な場合は、集約フレームワークを使用できます。

> db.test.insert({answers: [
...                 {name: 'paul', state: 'RU'},
...                 {name: 'steve', state: 'US'}, 
...                 {name: 'mike', state: 'DE'}]});
> db.test.insert({answers: [
...                 {name: 'paul', state: 'RU'},
...                 {name: 'steve', state: 'US'}, 
...                 {name: 'xavier', state: 'TX'}]});

db.test.aggregate([
  {$unwind: "$answers"}, 
  {$sort: {"answers.name":1}}, 
  {$group: {_id:"$_id", answers: {$push:"$answers"}}}
]);

生成:

{
  "result" : [
  {
    "_id" : ObjectId("5053b2477d820880c3469364"),
    "answers" : [
      {
        "name" : "paul",
        "state" : "RU"
      },
      {
        "name" : "steve",
        "state" : "US"
      },
      {
        "name" : "xavier",
        "state" : "TX"
      }
    ]
  },
  {
    "_id" : ObjectId("5053af9f7d820880c3469363"),
    "answers" : [
      {
        "name" : "mike",
        "state" : "DE"
      },
      {
        "name" : "paul",
        "state" : "RU"
      },
      {
        "name" : "steve",
        "state" : "US"
      }
    ]
  }
],
  "ok" : 1
}
于 2012-09-14T22:42:19.710 に答える
-2

find() を実行した後、戻り値に対して sort() を使用できます。

db.collection.find({},{"answers.name":1}).sort({"answers.name":1})

検索により、コレクション内のすべてのドキュメントの名前フィールドが抽出されます。並べ替えは、それらを名前で昇順に並べ替えます。

http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

于 2012-09-14T22:47:43.343 に答える