藤崎です。
玉川さん、つっこみありがとうございます。
間違えていました。
db.collection.find().sort({“array.value":1});
で、配列内の全要素を見てソートしてくれました。
あとは、玉川さんも書いてらっしゃるとおり、最小の値が等しい場合のソートが課題ですね。
On Tuesday, January 7, 2014 at 9:46 PM, 玉川 竜司 wrote:
> 玉川です。
>
> あれれ?
>
> 配列内の第一要素でのソートは
>
> db.collection.find().sort({“array.0.value":1});
>
> じゃないでしょうか?
>
> 単に
>
> db.collection.find().sort({“array.value":1});
>
> としてやれば、配列内の全要素を見てソートしてくれるので、ほぼ林田さんのやりたいことができるかと思います。ちなみにdb.collection.ensureIndex{{“array.value":1});でインデックス張ることもできます。
>
> ただ、例えば昇順で並べたときに、配列内の最小の値が等しい複数のドキュメントのソート順を、それぞれのドキュメント中の2番目に小さい値でソートする(複合キーみたいな感じで)のは、簡単にはいかなさそうですね。
>
> —
> 玉川@大阪
>
> 2014/01/07 20:31、ショウケン, フジサキ <
syo...@gmail.com (mailto:
syo...@gmail.com)> のメール:
> > 林田さん
> > 藤崎です。
> >
> > ソートの仕様をもう少し明確にすると、他のみなさんも答えやすくなるかと思います。
> >
> > 第一ソートキーは、array配列の中の最小のvalue値
> > 第二ソートキーは、array配列の中の2番目に小さいvalue値
> > であってますでしょうか?
> >
> > つまり、このようなドキュメント4、5を追加すると、
> > ドキュメント4 { array : [ { name : “ffff", value : 2 }, { name : “gggg", value : 3 } ] }
> >
> > ドキュメント5 { array : [ { name : “hhhh", value : 6 }, { name : “iiii", value : 1 } ] }
> >
> >
> > このようにソートされる想定ですか?
> > ドキュメント2(valueなし)
> > ドキュメント3(value=1,3)
> > ドキュメント1(value=1,5)
> >
> >
> > ドキュメント5(value=1,6)
> >
> > ドキュメント4(value=2,3)
> >
> >
> > ご存知かもしれませんが、配列内の第一要素の値でソートする場合、クエリーはこのようになります。
> > db.collection.find().sort({"array.value":1});
> >
> >
> > しかし、上記のクエリーでは林田さんの望むような結果にはならないので、事前に
> > "配列内のドキュメントをあるキーに基づいてソートする"
> > プロセスが必要となります。
> >
> > という解釈であってますか?
> >
> > --
> > 藤崎 祥見(フジサキ ショウケン)
> > Fujisaki, Shoken
> >
syo...@gmail.com (mailto:
syo...@gmail.com)
> >
> >
> > On Tuesday, January 7, 2014 at 7:52 PM, 林田 敦 wrote:
> >
> > > MongoDB JPコミュニティの皆様
> > >
> > > あけましておめでとうございます。林田です。
> > > 本年もどうぞよろしくお願いいたします。
> > >
> > > 新年早々ではございますが、ソートについて教えてください。
> > > ドキュメントに含まれる配列内の値でソートしたいのですが、可能でしょうか。
> > >
> > > 例えば、以下のようなドキュメントがあったとします。
> > >
> > > ドキュメント1 { array : [ { name : "aaaa", value : 1 }, { name : "bbbb", value : 5 } ] }
> > > ドキュメント2 { array : [ { name : "cccc" } ] }
> > > ドキュメント3 { array : [ { name : "dddd", value : 3 }, { name : "eeee", value : 1 }, ] }
> > >
> > > このとき、array配列内のvalueに対してソートをかけ、以下のような順でドキュメントを取り出したいです。
> > >
> > > ドキュメント2(valueなし)
> > > ドキュメント3(value=1,3)
> > > ドキュメント1(value=1,5)
> > >
> > > そもそも配列内の値でソートすることが可能なのかどうか、
> > > また、可能な場合はどのようなクエリを投げればよいか、ご教示いただけませんでしょうか。
> > >
> > > 以上、よろしくお願いいたします。
> > >
> > > 林田
> > >
> > > --
> > > このメールは Google グループのグループ「MongoDB JP」の登録者に送られています。
> > > このグループから退会し、メールの受信を停止するには、
mongodb-jp+...@googlegroups.com (mailto:
mongodb-jp+...@googlegroups.com) (mailto:
mongodb-jp+...@googlegroups.com) にメールを送信します。
> > > このグループに投稿するには、
mongo...@googlegroups.com (mailto:
mongo...@googlegroups.com) (mailto:
mongo...@googlegroups.com) にメールを送信してください。
> > このグループから退会し、メールの受信を停止するには、
mongodb-jp+...@googlegroups.com (mailto:
mongodb-jp+...@googlegroups.com) にメールを送信します。
> このグループから退会し、メールの受信を停止するには、
mongodb-jp+...@googlegroups.com (mailto:
mongodb-jp+...@googlegroups.com) にメールを送信します。