3

Mongoid クエリから返される個別の結果の数を制限しようとしています。

Place.where({:tags.in => ["food"]}).distinct(:name).limit(2)

しかし、これにより次のエラーがスローされます。

NoMethodError: undefined method 'limit' for ["p1", "p2", "p3", "p4"]:Array

結果セット全体をフェッチしてから、配列から限られた数の項目を選択する代わりに、mongoid クエリに制限を設定するにはどうすればよいですか。

ありがとう

4

1 に答える 1

7

MongoDB での明確な違いはコマンドであり、コマンドはカーソルを返しません。ここでは sort() がサポートされていないのと同じように、カーソルのみが limit() をサポートしていますが、コマンドの結果はサポートしていません。ソートは最初に実行するのに十分重要であると思います。

これを回避する方法はありますが、集約フレームワークを使用します。プレーンな MongoDB クエリでは (MongoDB シェルで使用する場合と同様)、次を使用します。

db.places.aggregate( [
    { $match: { 'tags' : { $in: [ 'food' ] } } },
    { $group: { '_id': '$name' } },
    { $sort: { 'name': 1 } },
    { $limit: 2 },
] );

Mongoid では、最初の行を次のように変更できると思います。

Place.collection.aggregate( [
于 2013-07-10T10:26:42.053 に答える