Node.js MongoDB正在返回所有字段,而不是匹配的字段

Node.js MongoDB正在返回所有字段,而不是匹配的字段,node.js,mongodb,Node.js,Mongodb,我正试图与MongoDB一起加入2个系列。不管我怎么想,它都不起作用。。这就是我现在拥有的: 正在尝试加入这两个集合 //Group collection _id:ObjectId(5fa2d687c59139213cf8c081) groupname: : chatting //Peoplegroups collection _id:5fa2d687c59139213cf8c082 groupid:5fa2d687c59139213cf8c081 user:PNZT4lvwQZPCWql6r

我正试图与MongoDB一起加入2个系列。不管我怎么想,它都不起作用。。这就是我现在拥有的:

正在尝试加入这两个集合

//Group collection
_id:ObjectId(5fa2d687c59139213cf8c081)
groupname: : chatting

//Peoplegroups collection
_id:5fa2d687c59139213cf8c082
groupid:5fa2d687c59139213cf8c081
user:PNZT4lvwQZPCWql6rWVEJHjt6Pe2
使用此nodejs代码,我尝试获取查询:

 app.get("/groups/sync", (req, res) => {
  db.collection("groups")
    .aggregate([
      {
        $lookup: {
          from: "peoplegroups",
          localField: "groups_id",
          foreignField: "groupid",
          as: "User",
        },
      },
    ])
    .toArray(function (err, data) {
      if (err) throw res.status(500).send(err);
      res.status(201).send(data);
    });
});
输出:

[
    {
        "_id": "5fa2d687c59139213cf8c082",
        "groupid": "5fa2d687c59139213cf8c081",
        "user": "PNZT4lvwQZPCWql6rWVEJHjt6Pe2",
        "__v": 0,
        "User": [
            {
                "_id": "5fa2d687c59139213cf8c081",
                "groupname": "rsr",
                "__v": 0
            },
            {
                "_id": "5fa2d689c59139213cf8c083",
                "groupname": "rsrs",
                "__v": 0
            },
            {
                "_id": "5fa2d68ac59139213cf8c085",
                "groupname": "easa",
                "__v": 0
            }
        ]
    },

如您所见,它返回所有peoplegroups字段,而不是与组id匹配的groupid。有什么问题吗?

首先,
$lookup
本地字段不正确。按照您的模式应该是
\u id
,而不是
组\u id

第二件事是,你想加入什么

知道一个
\u id
获取所有
人员组
哪个
组id
等于
\u id
? 或者只按相同的
groupid
对您的
人员组进行分组

要获得第一个,您需要在
$lookup
之前有一个
$match
阶段,如下所示:

db.group.aggregate([
{
“$match”:{
“_id”:1
}
},
{
“$lookup”:{
“from”:“peoplegroups”,
“localField”:“\u id”,
“foreignField”:“groupid”,
“作为”:“用户”
}
}
])
这样,您将获得
groupid
等于
1
的所有用户

范例


但是,第二个选项(在查询之后)将对不同的用户进行分组。查看此项了解其工作原理。

localField:“groups\u id”
localField:“\u id”
。但是,它们也必须是相同的类型。检查它们是否在地图册或指南针中。谢谢您的回答。第二个例子正是我想要实现的(将groupid与集合“group”中的_id进行匹配),但是当我完全尝试您所做的事情时,它不起作用。这是因为groupid是字符串而_id是ObjectID吗?是的,这是可能的。尝试将模式中的
groupid
设置为
ObjectId
.Jep,这就是问题所在。。Pfff。。。非常感谢你的帮助。不客气!此外,如果答案解决了你的问题,请将其标记为已接受并表示感谢