2016-04-26 7 views
1

MongoDBシェルを使用していくつかの結果を取得しています。ここでサンプラーだ、私が手に入れたいものを配列フィールドでサブ文書を並べ替える方法は?

{ 
"_id" : "32022", 
"topics" : [ 
    { 
     "weight" : 281.58551703724993, 
     "words" : "some words" 
    }, 
    { 
     "weight" : 286.6695125796183, 
     "words" : "some more words" 
    }, 
    { 
     "weight" : 289.8354232846977, 
     "words" : "wowz even more wordz" 
    }, 
    { 
     "weight" : 305.70093587160807, 
     "words" : "WORDZ" 
    }] 
} 

は、同じ構造であるが、私はいくつか注文した結果を得ることができませんが、idフィールドによってそれらをグループ化するには運"topics" : []

{ 
"_id" : "32022", 
"topics" : [ 
    { 
     "weight" : 305.70093587160807, 
     "words" : "WORDZ" 
    }, 
    { 
     "weight" : 289.8354232846977, 
     "words" : "wowz even more wordz" 
    }, 
    { 
     "weight" : 286.6695125796183, 
     "words" : "some more words" 
    }, 
    { 
     "weight" : 281.58551703724993, 
     "words" : "some words" 
    }, 
    ] 
} 

によって命じました。これを行う方法はありますか?

+0

あなたは私たちのサンプルドキュメントを表示する必要がありますあなたが得たものだけでなく、期待される結果。 – styvane

+0

@ user3100115更新された質問を確認する –

答えて

3

MongoDBはこれを実行する方法を提供していませんが、文書を更新して$sort更新演算子を使用して配列をソートするという回避策があります。

db.collection.aggregate([ 
    {"$unwind": "$topics"}, 
    {"$sort": {"_id": 1, "topics.weight": -1}}, 
    {"$group": {"_id": "$_id", "topics": {"$push": "$topics"}}} 
]) 

をしかし、あなたが望むすべてがソートあなたの配列である場合、これはあまり効率的であり、あなたは間違いなくそれを行うべきではありません。

db.collection.update_many({}, {"$push": {"topics": {"$each": [], "$sort": {"weight": -1}}}}) 

あなたはまだこのよう.aggregate()メソッドを使用することができます。


あなたはいつも.sortまたはsorted機能を使用して、このクライアント側を行うことができます。

1

アップデートだけで文書を取得したくない場合は、次のクエリ

db.test.aggregate(
[ 
    {$unwind : "$topics"}, 
    {$sort : {"topics.weight":-1}}, 
    {"$group": {"_id": "$_id", "topics": {"$push": "$topics"}}} 
] 
) 
+0

'{" $ match ":{" _id ":" 12345 "}}をパイプラインパラメータに追加すると、 –

+0

@BediEこれは私の答えのコピーであり、既存のものに何の価値も追加していません。 – styvane

0

を使用することができますそれは私の作品:

db.getCollection('mycollection').aggregate(
{$project:{topics:1}}, 
{$unwind:"$topics"}, 
{$sort :{"topics.words":1}}) 
+0

これは間違っても、期待した結果が得られません。 – styvane

関連する問題