MongoDB发现像Lodash发现一样

MongoDB发现像Lodash发现一样,mongodb,mongoose,lodash,database,Mongodb,Mongoose,Lodash,Database,我是否可以通过MongoDB查询执行类似的操作(我也在使用MongooseJS) 在lodash,我可以做到: var字符=[ {'name':'barney','age':36,'blocked':false}, {'name':'fred','age':40,'blocked':true}, {'name':'pebbles','age':1,'blocked':false} ]; _.find(字符、函数(chr){ //执行任何类型的逻辑并最终返回布尔值。 返回chr.age-10>24

我是否可以通过MongoDB查询执行类似的操作(我也在使用MongooseJS)

在lodash,我可以做到:

var字符=[
{'name':'barney','age':36,'blocked':false},
{'name':'fred','age':40,'blocked':true},
{'name':'pebbles','age':1,'blocked':false}
];
_.find(字符、函数(chr){
//执行任何类型的逻辑并最终返回布尔值。
返回chr.age-10>24;
}); // 返回巴尼和弗雷德
我可以用内置的mongo驱动程序或mongoosejs执行类似的操作吗?我不希望像这样读取所有对象并遍历它们,因为它们可能很多。我宁愿mongo为我做这件事


谢谢

Lo Dash遍历元素,并将每个元素传递给回调函数。看起来这不容易做到。它需要创建一些非常复杂的东西,能够识别回调函数中的条件(解析它),然后在它们的帮助下尝试使用索引和过滤记录


MongoDB没有这样的选项。

虽然出于性能原因不建议使用它(因为它必须遍历每个文档并执行JavaScript,而不能使用索引),但您可以使用
$where
操作符()执行自定义JavaScript代码:

db.theCollection.find({ $where : "this.age - 10 > 24" })

(我猜真正的逻辑会更复杂,因为可以在不使用
$where
find({age:{$gt:24}})的情况下处理该查询)
。如果可能,尝试使用内置的查询运算符,因为它们通常效率更高,而且通常更容易利用字段索引。

这会比获取整个集合并对节点中的所有内容执行逻辑更快吗?可能会。这可能很大程度上取决于系统配置、请求的数据、复杂性和f子句…MongoDB确实有这样一个选项。请看我的答案。我同意,但它仍然不做任何优化(),只做一个完整的表扫描。可能$where可以与预筛选数据结合使用。