NodeJS 如何使用mongoose在具有2个条件的数组中查找对象中的元素?[已关闭]

pdtvr36n  于 11个月前  发布在  Node.js
关注(0)|答案(2)|浏览(128)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

7天前关闭
Improve this question
我希望使用mongoose来查找一个基于查询的文档,该查询在数组中的对象中查找两个属性值。我使用了下面显示的代码,但它没有按预期工作-它返回包含“kiosk”的文档以及数组中计数为3的任何设备项。我希望它只返回设备名称为kiosk的文档,并且只有在3个售货亭。有人能帮忙吗?

if (equipment && equipment !== "All") {
    const projects = await Project.find({
      $and: [
        {
          "equipment.name": "kiosk",
          "equipment.count": 3,
        },
      ],
    });
    res.status(StatusCodes.OK).json({ projects });
    
    return;
  }

字符串
到目前为止,我所尝试的就是我所展示的。任何建议都将受到赞赏。

jjjwad0x

jjjwad0x1#

我认为你应该在mongoose中使用**$elemMatch**运算符。这用于查询匹配多个记录的数组元素。
第一个月

oug3syen

oug3syen2#

您当前的查询很接近,但在这种情况下不需要使用$and,因为您为同一字段指定了多个条件。您可以直接在find方法中使用具有多个属性的对象。

if (equipment && equipment !== "All") {
  const projects = await Project.find({
    "equipment.name": "kiosk",
    "equipment.count": 3,
  });
  res.status(StatusCodes.OK).json({ projects });
  return;
}

字符串

更新

如果您想确保只有名称为“kiosk”的设备项的计数为3,则可以使用$elemMatch运算符来指定数组中元素的条件。

if (equipment && equipment !== "All") {
  const projects = await Project.find({
    equipment: {
      $elemMatch: {
        name: "kiosk",
        count: 3,
      },
    },
  });
  res.status(StatusCodes.OK).json({ projects });
  return;
}

相关问题