2012-03-17 15 views
3

は、次のMongoDBドキュメントを検討:のMongoDB:ソートされたアレイ

SomeObject { 
    nested_objects_ids : [ 
     ObjectId("1..."), 
     ObjectId("2..."), 
     ... 
     ObjectId("N...") 
    ] 
} 

nested_object_idsの長さが限定されるものではありません。 nested_object_idsの配列を任意の値(ObjectIdsなど)を押した後にソートしておくと便利ですか?

ありがとうございました!

+0

あなたはなにをソートしていますか? 'ObjectId'自体?既に発生するはずの挿入順序でソートする必要がある場合。 – Russell

+0

私はまた、良い解決策があるかどうかを知りたいので、質問のために+1してください。私が知る限り、数値の並べ替え順に並べ替えるには、単純に$ pushを使うのではなく、並べ替えた形で配列全体を書き戻す($ set)必要があります:anObjectId –

+0

@Russel、最初に_id "45 ..."のオブジェクトが挿入され、次のオブジェクトは_id = "42 ..."となります。配列の最後に挿入されますが、id = "45 ..."のオブジェクトの直前に配置したいと思います。 –

答えて

2

nested_object_idsの配列を任意の値を押した後に並べ替えたままにするエレガントな方法はありますか?

残念ながら、私は「エレガント」とは考えていません。

$pushコマンドはここでは機能しません。唯一の選択肢は、サブアレイ全体をクライアントに引き込み、$setで書き直すことです。

正直なところ、「オブジェクトの配列」を扱う場合、MongoDBの機能は限られています。 $push$pullで更新することができ、オブジェクトフィールドのインデックスを作成できますが、それはそれです。

特定のサブオブジェクトを更新するのは難しいです。クエリはサブオブジェクトを返しませんが、代わりにドキュメント全体を返します。 nested_object_idsを返すようにフィルターをかけることができますが、常に全体のセットを取得します。

質問:なぜネストされたオブジェクトを並べ替える必要がありますか

+0

コメントありがとうございました。この配列内に保持されたObjectIdが異なる非同期ソースから来る状況を考えてみましょう。 ObjectId_n

1

Mongodbの2.4リリースでソートされた$ pushが可能になります。

2

これでソートされた配列の機能への$プッシュでこれを行うことができます。https://jira.mongodb.org/browse/SERVER-8008

+0

私はそれに[SERVER-991](https://jira.mongodb.org/browse/SERVER-991)のドキュメントに '$ sort'の' $ push'を実行します。 –

+0

あなたはその機能要求から '$ orderBy'を使うことができるようです...しかし、私は流星(mongo 2.6)を使ってmongoを実行しています。 – lol

関連する問題