1

たとえば、BlogPost/Commentsスキーマがここにあるとします。

http://mongoosejs.com/

コメントが5つを超えるすべての投稿を見つけるにはどうすればよいですか?私はの線に沿って何かを試しました

where('comments').size.gte(5)

しかし、私は構文につまずきます

4

3 に答える 3

4

MongoDbは、サイズ演算子( Link )を使用した範囲クエリをサポートしていません。自分でインクリメントするリストのサイズを含めるために、別のフィールドを作成することをお勧めします。

$ sizeを使用してサイズの範囲を検索することはできません(例:複数の要素を持つ配列)。範囲を照会する必要がある場合は、要素を追加するときに増分する追加のサイズフィールドを作成します。

于 2012-05-30T00:31:52.970 に答える
1

一部のクエリでは、(n)または条件を使用して、必要なすべてのカウントを一覧表示したり、除外したりすることが可能な場合があることに注意してください。

あなたの例では、次のクエリは5つ以上のコメントを持つすべてのドキュメントを提供します(mongooseではなく標準のmongodb構文を使用):

db.col.find({"comments":{"$exists"=>true}, "$nor":[{"comments":{"$size"=>4}}, {"comments":{"$size"=>3}}, {"comments":{"$size"=>2}}, {"comments":{"$size"=>1}}, {"comments":{"$size"=>0}}]})

明らかに、これは非常に反復的であるため、たとえあったとしても、小さな境界に対してのみ意味があります。通常、mongodbのドキュメントで推奨されているように、個別のカウント変数を保持することをお勧めします。

于 2012-06-27T14:03:50.803 に答える
0

遅いですが、$where句を使用することもできます。

db.Blog.find({$where:"this.comments.length > 5"}).exec(...);
于 2014-05-30T14:53:01.967 に答える