我想在 MongoDB 上运行一个查找查询,搜索集合中的一组文档,其中每个文档包含一个元素列表,并且只返回列表中元素数大于 X 的文档。
这将返回 len(messages) == X 的所有文档:
db.log.find({'messages':{'$size':X}})
但是如何获取 len(messages) >= X 的所有文档?
在 MongoDB 2.2+ 中,您可以利用可以在查询对象键中使用数字数组索引来执行此操作的事实:
# X is the minimum number of messages
X = 3
db.log.find({'messages.' + str(X-1): {'$exists': 1}})
您可以通过此管道在聚合框架中执行此操作:
db.collection.aggregate({$unwind:"$messages"},
{$group:{_id:"$_id", msgCount:{$sum:1}}},
{$match:{msgCount:{$gte:<SIZE>}}}
);
填写您要查找的尺寸超过<SIZE>
.