Javascript MongoDB通过findOne加入集合
我有一个mongo db查询,它获取一个对话线程及其参与者的详细信息。选项卡是线程的一部分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
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()