У меня есть три таблицы ниже, это структура, как показано ниже
Я хочу получить результат, как показано ниже
"type1": [ -- type from Accounts collection
{
"_id": "5e97e9a224f62f93d5x3zz46", -- _id from Accounts collection
"locs": "sampleLocks 1", -- field from Accounts collection
"solutions": "sample solutions 1", -- field from Accounts collection
"Clause": "clause 1" -- field from AccountsDesc collection
},
{
"_id": "5e97e9a884f62f93d5x3zz46",
"locs": "sampleLocks2",
"solutions": "sample solutions2",
"Clause": "clause2"
}
],
"type2": [
// same data construction as of type1 above
]
- _id, блокировки, решение, которое будет получено из Коллекция учетных записей
- Поле предложения, которое будет получено из AccountsDes c collection
- accounts_id, является своего рода внешний ключ в AccountsDes c, исходящий из Account
- Competitor_id, является своего рода внешним ключом в AccountsDes c, исходящим от Competitor
Ниже приведен мой запрос как
db.accountDesc.aggregate([
{
$match : {accounts_Id : "123456"}, active: true}
},
{
$lookup: {
from: 'accounts',
pipeline: [{ $match: { type: { $in: ["type1, type2, type3"] } } }],
as: 'accountsData'
}
},
{
$group: {
_id: "$accountsData.type",
data: {
$push: {_id: "$accountsData._id", clause: "$clause", locs: "$type.locs", solutions: "$type.solutions"}
}
}
},
{
$group: {
_id: null,
data: {
$push: {
k: {
$toString: '$_id'
},
v: '$data'
}
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: '$data'
}
}
}
])
Проблемы, связанные с запросом -
$match : {accountId : "123456"}, active: true}
- Данные не возвращаются, если я использую совпадение в AccountsDes c collection - не могу установить localField, foriegnField, если я использую конвейер, то как будет происходить сопоставление, как при левом соединении.
- предложение:
"$clause"
не получить значение этого поля в ответе