Javascript 在聚合中的嵌入文档上使用$match

Javascript 在聚合中的嵌入文档上使用$match,javascript,node.js,mongodb,mongoose,backend,Javascript,Node.js,Mongodb,Mongoose,Backend,我试图使用$match在双嵌入式文档中查找具有特定_id的项目 我有一个名为users的文档,其中包含诸如姓名、电子邮件等信息,它还包含一个嵌入式文档,其中包含该用户的业务 我还有一个名为businesss的文档,其中包含一个嵌入式文档,其中包含该业务所在的大楼 我还有一份文件叫building 我正在尝试一个mongo查询,它返回在某个建筑ID上有业务的所有用户 我有一个聚合函数,它使用$lookup将用户与他们所在的建筑进行匹配。这确实有效。但是现在我尝试使用$match只返回具有特定建筑i

我试图使用$match在双嵌入式文档中查找具有特定_id的项目

我有一个名为users的文档,其中包含诸如姓名、电子邮件等信息,它还包含一个嵌入式文档,其中包含该用户的业务

我还有一个名为businesss的文档,其中包含一个嵌入式文档,其中包含该业务所在的大楼

我还有一份文件叫building

我正在尝试一个mongo查询,它返回在某个建筑ID上有业务的所有用户

我有一个聚合函数,它使用$lookup将用户与他们所在的建筑进行匹配。这确实有效。但是现在我尝试使用$match只返回具有特定建筑id的文档

以下是我的用户、业务和建筑文档的示例:

_id: 5ca487c0eeedbe8ab59d7a7a
name: "John Smith"
email: "jsmith9@gmail.com"
business: Object
  _id: 5ca48481eeedbe8ab59d7a38
  name: "Visitors"


_id: 5ca48481eeedbe8ab59d7a38
name: "Visitors"
building: Object
  _id: 5ca48481eeedbe8ab59d7a36
  name: "Building1"


_id: 5ca48481eeedbe8ab59d7a36
name: "Building1"
返回聚合查询时,它将返回以下格式的文档:

    {
        "_id": "5ca487c0eeedbe8ab59d7a7a",
        "name": "John Smith",
        "email": "jsmith9@gmail.com",
        "business": {
            "_id": "5ca48481eeedbe8ab59d7a38",
            "name": "Visitors"
        },
        "__v": 0,
        "user_building": {
            "_id": "5ca48481eeedbe8ab59d7a38",
            "name": "Visitors",
            "building": {
                "_id": "5ca48481eeedbe8ab59d7a36",
                "name": "Building1"
            },
            "__v": 0
        }
    },
但是,当我添加匹配项时,它返回[]。我做错了什么

router.get("/:id", async (req, res) => {
  const users_buildings = await User.aggregate([
    {
      $lookup: {
        from: "businesses",
        localField: "business._id",
        foreignField: "_id",
        as: "user_building"
      }
    },
    { $unwind: "$user_building" },

    {
      $match: {
        "user_building.building": { _id: req.params.id }
      }
    }
  ]);

您需要在建筑对象内匹配_id。试试这个

 {
  $match: {
    "user_building.building._id": req.params.id
  }
}
如果不起作用

{
  $match: {
    "user_building.building._id": ObjectId(req.params.id)
  }
}
操作编辑:我导入了ObjectId,其中包含:

var ObjectId = require('mongodb').ObjectID;

并且使用了第二种解决方案,它工作正常。

感谢您的回复,这两种方法都不起作用,我仍然收到一个空列表。对于第二个解决方案,没有定义ObjectId,我需要导入什么来尝试;再次导入并运行请求,请求成功。非常感谢你!