我正在嘗試使用 mongoose 進行聚合,但我遇到了幾個問題,
來自用戶模型的檔案
{
"_id": {
"$oid": "630273bbe0f3f82d85b149bd"
},
"password": "$2b$12$2f04ijl0fDVHUgBF3rZi.eKfNYkzHZShHNPKfiDEu2NXEXhb.2O",
"name": "name1",
"tel": " 33612345678"
}
來自潛在客戶模型的檔案
{
"_id": {
"$oid": "6319e54c8cc8b7a5521ad266"
},
"name": "name2",
"tel": " 33712345678"
}
我有另一個模型,其中Bookings包含一個或多個模型,我想與之進行聚合,refUsersLeads
有一個預訂檔案的例子:
{
"_id": {
"$oid": "6310a86c6303d0987fe6fac4"
},
"date": {
"$date": "2022-09-01T14:36:12Z"
},
"user": {
"$oid": "630273bbe0f3f82d85b149bd"
},
"ref": "User"
}
有我的聚合:
const leads = await this.bookingModel.aggregate([
{
$group: {
_id: {
user: '$user'
}
}
},
{
$lookup: {
from: 'users',
localField: '_id.user',
foreignField: '_id',
as: 'leadUser',
pipeline: [
{
$project: {
name: 1,
tel: 1
}
}
]
}
},
{ $unwind: { path: '$leadUser', preserveNullAndEmptyArrays: true } },
{
$lookup: {
from: 'leads',
localField: '_id.user',
foreignField: '_id',
as: 'lead',
pipeline: [
{
$project: {
name: 1,
tel: 1
}
}
]
}
},
{ $unwind: { path: '$lead', preserveNullAndEmptyArrays: true } }
])
有幾個問題我想解決,
首先,我不能在查找時設定相同的鍵as,如何避免放置lead和leadUser放置相同的鍵?
另外,如何避免重復檔案$grouptel,這tel在兩個模型中,現在我只是與用戶分組,但我不希望用戶和領導有相同的電話。
編輯:有操場https://mongoplayground.net/p/TyYvasdyz_O
我希望lead和leadUser使用相同的密鑰,并按電話分組以洗掉重復項
非常感謝 !
uj5u.com熱心網友回復:
如果我理解正確,你想要這樣的東西:
- 在你
$lookup的 s 之后,而不是 `$unwind,連接陣列并只保留第一項。 - 按 分組
$tel以保持其唯一性
db.bookings.aggregate([
{$group: {_id: {user: "$user"}}},
{$lookup: {
from: "users",
localField: "_id.user",
foreignField: "_id",
as: "leadUser",
pipeline: [{$project: {name: 1, tel: 1}}]
}
},
{$lookup: {
from: "leads",
localField: "_id.user",
foreignField: "_id",
as: "lead",
pipeline: [{$project: {name: 1, tel: 1}}]
}
},
{$project: {lead: {$first: {$concatArrays: ["$lead", "$leadUser"]}}}},
{$group: {_id: "$lead.tel", lead: {$first: "$lead"}, user: {$first: "$_id.user"}}},
{$project: {_id: {user: "$user"}, lead: 1}}
])
看看它在操場上的例子是如何作業的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506428.html
