MongoDB使用对象数组作为搜索参数查找文档



是否有一种方法来搜索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);

使用聚合

  1. 使用$Unwind去规范化项目
  2. 一旦非规范化,你可以使用简单的match$or
  3. 使用$lte$gte

和更新你的问题尝试这些或发布一个新的。

最新更新