为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB 通过 findOne 加入集合

MongoDB 通过 findOne 加入集合

智慧大石 2022-12-29 09:48:17
我有这个 mongo 数据库查询,它获取对话线程及其参与者详细信息。选项卡是线程的一部分。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 的结果。我该如何处理?
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以添加另一个电话:


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;

...

或者您可以使用利用$lookup的聚合管道:


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()

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


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号