例如,这里给出 BlogPost/Comments 模式:
我如何找到所有评论超过 5 条的帖子?我尝试了一些类似的东西
where('comments').size.gte(5)
但我被语法绊倒了
例如,这里给出 BlogPost/Comments 模式:
我如何找到所有评论超过 5 条的帖子?我尝试了一些类似的东西
where('comments').size.gte(5)
但我被语法绊倒了
MongoDb 不支持使用大小运算符 ( Link ) 进行范围查询。他们建议您创建一个单独的字段来包含您自己增加的列表的大小。
您不能使用 $size 查找大小范围(例如:具有超过 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 文档中的建议,保留一个单独的计数变量通常是更好的解决方案。
它很慢,但您也可以使用$where子句:
db.Blog.find({$where:"this.comments.length > 5"}).exec(...);