1

例如,这里给出 BlogPost/Comments 模式:

http://mongoosejs.com/

我如何找到所有评论超过 5 条的帖子?我尝试了一些类似的东西

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

但我被语法绊倒了

4

3 回答 3

4

MongoDb 不支持使用大小运算符 ( Link ) 进行范围查询。他们建议您创建一个单独的字段来包含您自己增加的列表的大小。

您不能使用 $size 查找大小范围(例如:具有超过 1 个元素的数组)。如果您需要查询范围,请创建一个额外的大小字段,当您添加元素时会增加该字段。

于 2012-05-30T00:31:52.970 回答
1

请注意,对于某些查询,仅使用 (n)or 条件列出您想要包含或排除的所有计数可能是可行的。

在您的示例中,以下查询将提供超过 5 条评论的所有文档(使用标准 mongodb 语法,而不是 mongoose):

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 回答