如何在Mongodb中根据文档字段中的每个数组项过滤集合



假设我有一个集合,如下所示:

[
{ "_id": "101",  parts: [1.2, 2] },
{ "_id": "102",  parts: [2, 3.5] },
{ "_id": "103",  parts: [4.1, 10] }
]

我需要写什么查询,以便数组parts中的每个项都大于等于输入数组[1, 5]中具有相同数组索引的项?

输出为:

[
{ "_id": "103",  parts: [4.1, 10] } // 4.1 >= 1 and 10 >= 5
]

这可能吗?知道吗?

您可以使用点表示法并为您的示例运行以下查询:

{"parts.0":{"$gte":1},"parts.1":{"$gte":5}}

Mongo游乐场

或者使用下面的JS代码来构建更通用的东西:

let input = [1,5];
let query = Object.fromEntries(input.map((val, i) => ([ "parts." + i, { $gte: val } ])));
console.log(query);

如果在查询之前知道输入数组,那么可以先从中创建查询对象,然后将此对象传递给查询:

let query = input.reduce((acc, cur, index) => {
acc['parts.' + index] = { $gt: cur };
return acc;
}, {});
// [1, 5] will create {"parts.0": {$gt: 1},"parts.1": {$gt: 5}}
db.collection.find(query)...

最新更新