繁体   English   中英

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

[英]MongoDB find documents using an array of objects as search argument

有没有办法使用对象数组搜索 mongodb 数据库作为搜索 arguments?

假设我有以下搜索偏好:

preferences = [{
    product: "PRODUCT_A",
    minqty: 5,
    maxqty: 50
  },
  {
    product: "PRODUCT_B",
    minqty: 100,
    maxqty: 500
  }
]

在我的数据库中,我的 Jobs 具有以下结构:

{
  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(成功):

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. 一旦非规范化,您可以使用$or的简单match
  3. 使用$lte$gte

并通过您的这些尝试更新问题或发布新问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM