MongoDB性能:$和vs.具有多个键的单个对象
我有一个对订单执行某些操作的内部服务,它有一个内置的必需过滤器,服务用户可以通过额外的过滤器 实现同一目标的两种方法: A) 使用MongoDB性能:$和vs.具有多个键的单个对象,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个对订单执行某些操作的内部服务,它有一个内置的必需过滤器,服务用户可以通过额外的过滤器 实现同一目标的两种方法: A) 使用$和: 异步函数getOrders({optionalFilter={}){ const baseFilter={amount:{$gt:10}; const mergedFilter={$and:[baseFilter,optionalFilter]}; 返回等待订单。查找(合并过滤器); } B) 在同一对象中合并所有对象 异步函数getOrders({opti
$和:
异步函数getOrders({optionalFilter={}){
const baseFilter={amount:{$gt:10};
const mergedFilter={$and:[baseFilter,optionalFilter]};
返回等待订单。查找(合并过滤器);
}
B) 在同一对象中合并所有对象
异步函数getOrders({optionalFilter={}){
const baseFilter={amount:{$gt:10};
const mergedFilter={…baseFilter,…optionalFilter};
返回等待订单。查找(合并过滤器);
}
我更喜欢第一种方法,因为它允许我在不覆盖$gt:10
规则的情况下执行以下操作,而第二种方法将通过覆盖内部规则来破坏代码
getOrders({optionalFilter:{amount:{$lt:50}}});
我的问题是,选择一个比另一个有什么好处(性能或其他方面)
我的问题是,选择一个比另一个有什么好处(性能或其他方面)
- 简短回答:否。如果您不使用(复合)索引
- 长回答:好吧,让我们来测试一下,对吗
让我们来收集~100K文档和未索引数组字段:
{asset_class:“COMMDTY”}
{$and:[{item_子类:“Herb”,资产类:“COMMDTY”}}
{item_子类:“Herb”,资产类:“COMMDTY”}
$和与不使用之间存在114ms
差异。但这是否意味着停止使用$和,并避免使用它?当然不是。但随着更多领域的增加,Mongo将变得越慢。但当我向查询中添加一个已经索引的字段时,整个情况发生了变化
{扩展:“BFA”,资产类别:“COMMDTY”}
因此,如果您通过mergedFilter
添加更多字段,那么请确保您的索引(如果您正在使用它们)可以使用,因为对于复合索引字段,顺序非常有意义。因此,查询:{asset\u class:“COMMDTY”,扩展:“BFA”}
将进入:
如果我的回答有帮助,请您将其标记为已接受,或者至少对其投赞成票?