Gel*_*Luo 4 count filter mongodb
假设我有:
Order: {_id: ..., items: [...]}
Run Code Online (Sandbox Code Playgroud)
如何过滤商品编号大于5的订单?
您无法根据嵌入集合的大小进行查询,您需要为此类需求创建具有集合大小的字段(mongo db文档):
$ size运算符匹配具有指定数量元素的任何数组.以下示例将匹配对象{a:["foo"]},因为该数组只有一个元素:
db.things.find({a:{$ size:1}});
您不能使用$ size来查找一系列大小(例如:具有多于1个元素的数组).如果需要查询范围,请创建一个额外的大小字段,在添加元素时递增.
您可以使用$ where运算符.
> db.orders.save({Order: {items: [1,2]}})
> db.orders.save({Order: {items: [1,2,3]}})
> db.orders.find({$where:function() { if (this["Order"]["items"].length > 2) return true; }})
{ "_id" : ObjectId("4d334c9102bcfe450ce52585"), "Order" : { "items" : [ 1, 2, 3 ] } }
Run Code Online (Sandbox Code Playgroud)
$ where的两个缺点是它不能使用索引,BSON对象必须转换为JavaScript对象,因为您在集合中的每个文档上运行自定义JavaScript函数.
因此,对于大型集合来说,$ where可能非常慢.但是,对于临时或很少运行的查询,它非常方便.如果您经常需要运行这样的查询,那么您应该遵循Bugai13的建议,因为您可以索引存储数组大小的密钥.
| 归档时间: |
|
| 查看次数: |
5846 次 |
| 最近记录: |