У меня есть коллекция, в которой хранятся данные, как показано ниже.
{
"_id" : ObjectId("5c52ba3177c895e98b3f41f7"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26B",
"leadName" : "LeadB",
"text" : "call client AEVUSSMS26B",
"reminderAt" : ISODate("2019-02-22T11:54:24.123+0000")
}
{
"_id" : ObjectId("5c52bdc277c895e98b3f41f8"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26A",
"leadName" : "LeadA",
"text" : "call client AEVUSSMS26A",
"reminderAt" : ISODate("2019-02-22T11:55:24.123+0000")
}
{
"_id" : ObjectId("5c52bdcd77c895e98b3f41f9"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26B",
"leadName" : "LeadB",
"text" : "call client AEVUSSMS26B",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
{
"_id" : ObjectId("5c5403c7407b4aefc00dae39"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26C",
"leadName" : "LeadC",
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
{
"_id" : ObjectId("5c54040f407b4aefc00dae3a"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26C",
"leadName" : "LeadC",
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
{
"_id" : ObjectId("5c540426407b4aefc00dae3b"),
"email" : "name@gmail.com",
"mobile" : "1234567890",
"userId" : "59b94212e4b0a459d044cd31",
"leadId" : "AEVUSSMS26C",
"leadName" : "LeadC",
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
//I have 1000s such users
У одного пользователя может быть несколько отведений.Один запрос может иметь несколько напоминаний.
Я хочу запросить и отформатировать результат так, чтобы один документ представлял одного пользователя.Каждый документ будет иметь ведущее поле, в котором будут храниться все напоминания.Я ожидаю что-то вроде ниже:
{
"userId" : "59b94212e4b0a459d044cd31",
"email":"name@gmail.com",
"mobile":"1234567890"
"leads" : [
{
"_id" : {
"leadId" : "AEVUSSMS26C",
"leadName" : "LeadC"
},
"leadData" : [
{
"_id" : ObjectId("5c5403c7407b4aefc00dae39"),
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
},
{
"_id" : ObjectId("5c54040f407b4aefc00dae3a"),
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
},
{
"_id" : ObjectId("5c540426407b4aefc00dae3b"),
"text" : "call client AEVUSSMS26C",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
]
},
{
"_id" : {
"leadId" : "AEVUSSMS26A",
"leadName" : "LeadA"
},
"leadData" : [
{
"_id" : ObjectId("5c52bdc277c895e98b3f41f8"),
"text" : "call client AEVUSSMS26A",
"reminderAt" : ISODate("2019-02-22T11:55:24.123+0000")
}
]
},
{
"_id" : {
"leadId" : "AEVUSSMS26B",
"leadName" : "LeadB"
},
"leadData" : [
{
"_id" : ObjectId("5c52ba3177c895e98b3f41f7"),
"text" : "call client AEVUSSMS26B",
"reminderAt" : ISODate("2019-02-22T11:54:24.123+0000")
},
{
"_id" : ObjectId("5c52bdcd77c895e98b3f41f9"),
"text" : "call client AEVUSSMS26B",
"reminderAt" : ISODate("2019-02-22T11:56:24.123+0000")
}
]
}
]
}
Это то, что я сделал до сих пор.Проблемы, с которыми я сталкиваюсь: 1. как настроить электронную почту и мобильный телефон на корневом уровне?2.Как передать ограниченные данные как в ответе вместо $$ ROOT?
db.getCollection("MyCollection").aggregate([
{
"$group": {
"_id": {
"leadId": "$leadId",
"userId": "$userId"
},
"leadData": { $push: "$$ROOT" }
}
},
{
"$group": {
"_id": "$_id.userId",
"leads": {
"$push": "$$ROOT",
}
}
}
])