收藏用户:
_id: ObjectId,
name: 'string',
requests: [
{
ref: 'users',
type: Schema.Types.ObjectId,
default: null
}
],
我需要聚合相同的集合。所以,这是用户一的演示数据
{
"_id": {
"$oid": "668372606b19b60fbe84e4b9"
},
"name": "user1",
"requests": []
}
这是用户二:
{
"_id": {
"$oid": "6687c6e1ebe711aac96de69d"
},
"name": "user2",
"requests": [
{
"$oid": "668372606b19b60fbe84e4b9"
}
]
}
我需要给出user2的id并聚合请求数组数据并返回user1的名称(数组可以有更多id)
我的查询是:
let requests = await User.aggregate([
{
$match: { _id: new mongoose.Types.ObjectId(userId)} //comes from frontend
},
{ $lookup: {
from: "users",
let: { requests: "$requests" },
pipeline: [
{ $match: { $expr: { $in: ["$_id", "$$requests"] }}},
],
as: "requestsData"
}
}
]);
但它返回一个空数组。
你在
$lookup
阶段感到困惑。 let
变量应包含当前集合文档中的字段。因此,它应该是 _id
,即 user1 值。
db.users.aggregate([
{
$match: {
_id: new mongoose.Types.ObjectId(userId) //comes from frontend
},
{
$lookup: {
from: "users",
let: {
id: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$$id",
"$requests"
]
}
}
}
],
as: "requestsData"
}
}
])