有没有一种方法可以使用对象数组作为搜索参数来搜索mongodb数据库?
可以说我有以下搜索首选项:
preferences = [{
product: "PRODUCT_A",
minqty: 5,
maxqty: 50
},
{
product: "PRODUCT_B",
minqty: 100,
maxqty: 500
}
]
在我的数据库中,乔布斯具有以下结构:
{
jobName: "job name",
items: [{
product: "PRODUCT_A"
qty: 25
},
{
product: "PRODUCT_F"
qty: 300
}
]
}
我想使用首选项查询数据库,并返回至少匹配条件之一的所有作业。
我设法将所有偏好设置都用作过滤器,但它$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);
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);
我认为您可以通过减少preferences
数组并使用$or
运算符来创建搜索对象。映射preferences
数组时,它将返回一个将执行and
操作的数组。您需要一个像-
{
$or: [{product1, quantity1}, {product2, quantity2}]
}
我想你明白我的意思。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句