如何用Mongoose根据对象数组中属性值查询文档?
Mongoose 查询优化方案
我有一个结构统一的对象数组,每个对象包含field1、field2、field3字段,示例如下:
let obj1 = {field1: value1, field2: value2, field3: value3}; let listOfObjects = [obj1, obj2, obj3, obj4 .... objn];
我需要用Mongoose查询Model,找出keyToFind字段值与listOfObjects中任意对象的field1值匹配的文档。
目前我用以下方案可以实现,但想找更优的写法:
let valuesList = listOfObjects.map(x => x.field1); let docs = await Model.find({keyToFind: valuesList});
更优实现方式
你的现有写法已经是Mongoose处理这类批量匹配查询的常规思路,不过可以做简化,直接在查询条件中完成映射,省去单独定义valuesList的步骤:
let docs = await Model.find({ keyToFind: listOfObjects.map(x => x.field1) });
另外补充两个实用优化点:
- 给
keyToFind字段建立索引,数据量较大时能显著提升查询性能; - 若
listOfObjects可能为空,建议先判断数组长度,避免执行无意义查询(空数组的$in匹配会返回所有文档):
let docs = []; if (listOfObjects.length > 0) { docs = await Model.find({keyToFind: listOfObjects.map(x => x.field1)}); }
内容的提问来源于stack exchange,提问作者Mehdi M
相关产品推荐
相关产品推荐

