是否有一种方法来搜索mongodb数据库使用一个数组的对象作为搜索参数?
假设我有以下搜索首选项:
preferences = [{
product: "PRODUCT_A",
minqty: 5,
maxqty: 50
},
{
product: "PRODUCT_B",
minqty: 100,
maxqty: 500
}
]
在我的数据库中,我有以下结构的job:
{
jobName: "job name",
items: [{
product: "PRODUCT_A"
qty: 25
},
{
product: "PRODUCT_F"
qty: 300
}
]
}
我想使用首选项查询数据库,并返回与至少一个标准的匹配的任何作业。.
尝试1:
我设法使用我所有的首选项作为过滤器,但$match
是累积的,它的写作方式就像javascript中的&&
一样。我的目标是有"匹配这个||
匹配那个"。
let pipeline = [];
preferences.map((item) => {
let search = {
product: item.product,
quantity: { $gte: item.minqty, $lte: item.maxqty },
};
return pipeline.push({
$match: {
items: {
$elemMatch: search,
},
},
});
});
const jobs = await Job.aggregate(pipeline);
调度2 (SUCCESS):
let search = [];
preferences.map((item, index) => {
let arguments = {
product: item.product,
quantity: { $gte: item.minqty, $lte: item.maxqty },
};
search.push(arguments);
});
let pipeline = [
{
$match: {
items: {
$elemMatch: {
$or: search,
},
},
},
},
];
const jobs = await Job.aggregate(pipeline);
使用聚合
- 使用
$Unwind
去规范化项目 - 一旦非规范化,你可以使用简单的
match
和$or
- 使用
$lte
和$gte
和更新你的问题尝试这些或发布一个新的。