Javascript MongoDB通过findOne加入集合

Javascript MongoDB通过findOne加入集合,javascript,node.js,mongodb,nosql,Javascript,Node.js,Mongodb,Nosql,我有一个mongo db查询,它获取一个对话线程及其参与者的详细信息。选项卡是线程的一部分 var threadObject = await db .collection("threads") .findOne({ tabs: { $in: [ObjectId("5f2ad2ed59645244cc6a837a")] } }); 线程架构: { "_id": { "$oid&quo

我有一个mongo db查询,它获取一个对话线程及其参与者的详细信息。选项卡是线程的一部分

var threadObject = await db
        .collection("threads")
        .findOne({ tabs: { $in: [ObjectId("5f2ad2ed59645244cc6a837a")] } });
线程架构:

{
  "_id": {
    "$oid": "5f2ad2bb59645244cc6a8379"
  },
  "thread_participants": [
    {
      "$oid": "5f2ad2a759645244cc6a8377"
    },
    {
      "$oid": "5f2ad2a159645244cc6a8375"
    }
  ],
  "tabs": [
    {
      "$oid": "5f2ad2ed59645244cc6a837a"
    }
  ],
  "date_created": {
    "$date": "2020-08-05T15:39:39.088Z"
  }
}
用户架构:

{
  "_id": {
    "$oid": "5f2ad2a159645244cc6a8375"
  },
  "name": {
    "familyName": "Doe",
    "givenName": "John"
  },
  "email": "johndoe@example.com",
  "display_picture": "url",
  "threads": [
    {
      "$oid": "5f2ad2bb59645244cc6a8379"
    }
  ]
},
{
  "_id": {
    "$oid": "5f2ad2a759645244cc6a8377"
  },
  "name": {
    "familyName": "Doe",
    "givenName": "Monica"
  },
  "email": "monicadoe@example.com",
  "display_picture": "url",
  "threads": [
    {
      "$oid": "5f2ad2bb59645244cc6a8379"
    }
  ]
}

现在的问题是,我想检索用户的名字和姓氏以及这个threadObject的结果。如何处理此问题?

您可以添加另一个呼叫:

var threadObject = await db
        .collection("threads")
        .findOne({ tabs: { $in: [ObjectId("5f2ad2ed59645244cc6a837a")] } });

var user = await db
        .collection("users")
        .findOne({ threads: threadObject._id });

threadObject.user_name = user.name;
...
或者,您可以使用聚合管道,利用:

请注意,聚合将返回数组而不是对象

var threadObject = await db.collection("threads").aggregate([
    {
        $match: {
            tabs: {$in: [ObjectId("5f2ad2ed59645244cc6a837a")]}
        }
    },
    {
        $lookup: {
            from: "users",
            localField: "_id",
            foreignField: "threads",
            as: "user"
        }
    },
    {
        $unwind: "$user"
    },
    {
        $addFields: {
            user_name: "$user.name"
        }   
    },
    {
        $project: {
            user: 0
        }
    }
]).toArray()