коллекция 1: admin
{
"_id" : ObjectId("5e27fd3da42d441fe8a89580"),
"mappedcustomers": [
ObjectId("5e2555783405363bc4bf86c5"),
ObjectId("5e2555783405363bc4bf86c0"),
ObjectId("5e2555783405363bc4bf86c4")
],
"phoneNo" : 9897654358,
"name" : "acdbcs"
}
коллекция 2: productOrders
Tt имеет много документов, наша забота только о:
"productOrderedForDate" : ISODate("2020-02-04T18:30:00Z")
[заказ на завтра]. "productOrderedForDate" : ISODate("2020-02-28T18:30:00Z")
[заказ на прошлой неделе]
[
{
"_id": ObjectId("5e27f998a42d441fe8a8957f"),
"authorized": false,
"orderCreatedBy": ObjectId("5e2555783405363bc4bf86c4"), // one of the mappedCustomer
"productOrderedForDate": ISODate("2020-02-04T18:30:00Z"),// tomorrow Order
"order": [{
"_id": ObjectId("5e26be2cc13b7149d0a95110"),
"productName": "Cups",
"productCode": "CICE1",
"size R": 21,
"size L": 16
},
{
"_id": ObjectId("5e26be2cc13b7149d0a9510f"),
"productName": "Bottles",
"productCode": "BTCE1",
"size R": 12,
"size L": 3
}]
},
{
"_id": ObjectId("5e26be2cc13b7149d0b90752b"),
"authorized": false,
"orderCreatedBy": ObjectId("5e2555783405363bc4bf86c0"),// another mappedCustomer
"productOrderedForDate": ISODate("2020-02-04T18:30:00Z"),// tomorrow Order
"order": [{
"_id": ObjectId("5e26be2cc13b7149d0a87230"),
"productName": "Cups",
"productCode": "CICE1",
"size R": 9,
"size L": 7
},
{
"_id": ObjectId("5e26be2cc13b7149d0a8560e"),
"productName": "Bottles",
"productCode": "BTCE1",
"size R": 3,
"size L": 11
}]
},
{
"_id": ObjectId("5e26be2cc13b7149d0b9876f"),
"authorized": true,
"orderCreatedBy": ObjectId("5e2555783405363bc4bf86c4"), // one of the mappedCustomer
"productOrderedForDate": ISODate("2020-01-28T18:30:00Z"),// lastWeek order
"order": [{
"_id": ObjectId("5e26be2cc13b7149d0a54220"),
"productName": "Cups",
"productCode": "CICE1",
"size R": 2,
"size L": 6
},
{
"_id": ObjectId("5e26be2cc13b7149d0a6520e"),
"productName": "Bottles",
"productCode": "BTCE1",
"size R": 8,
"size L": 16
}]
},
{
"_id": ObjectId("5e78f998a42d441fe898765d"),
"authorized": true,
"orderCreatedBy": ObjectId("5e2555783405363bc4bf86c0"), // another mappedCustomer
"productOrderedForDate": ISODate("2020-01-28T18:30:00Z"),// lastWeek order
"order": [{
"_id": ObjectId("5e26be2cc13b7149d0a87230"),
"productName": "Cups",
"productCode": "CICE1",
"size R": 26,
"size L": 19
},
{
"_id": ObjectId("5e26be2cc13b7149d0a8560f"),
"productName": "Bottles",
"productCode": "BTCE1",
"size R": 4,
"size L": 5
}]
}
]
Это то, что я пытался и удалось размотать всех mappedCustomers, и в соответствии с этим я смог найти созданные ими заказы в коллекции заказов ниже, это конвейер агрегации
db.admin.aggregate([
{
$match: {
_id: ObjectId("5e27fd3da42d441fe8a89580")
}
},
{
$lookup:
{
from: 'admin',
localField: 'mappedCustomers',
foreignField: '_id',
as: 'mappedCustomers'
}
},
{
$unwind: '$mappedCustomers'
},
{
$replaceRoot: {newRoot: "$mappedCustomers"}
},
{
$lookup:
{
from: "orders",
let: {mappedCustomersId: "$_id"},
pipeline: [
{
$match: {
$expr: {$eq: ["$orderCreatedBy", "$$mappedCustomersId"]},
'$or': [
{
'orderCreatedOn': ISODate("2020-02-04T18:30:00Z")
}, {
'orderCreatedOn': ISODate("2020-01-28T18:30:00Z")
}]
}
}],
as: "orders"
}
}, {
$unwind: "orders"
}
])
Моя проблема в том, что мне нужно отобразить сумму все size R
и size L
для всех mappedCustomers
против productCode
, сопоставленных с этим администратором для завтрашней даты и даты предыдущей недели, т.е.
Ожидаемый результат:
{
orders : [
{
"productOrderedForDate": ISODate("2020-02-04T18:30:00Z"),
"productName": "Cups",
"productCode": "CICE1",
"size R": 30,
"size L": 23,
"lastWeek": [{
"productOrderedForDate": ISODate("2020-01-28T18:30:00Z"),
"size R": 28,
"size L": 25,
}]
}, {
"productOrderedForDate": ISODate("2020-02-04T18:30:00Z"),
"productName": "Bottles",
"productCode": "BTCE1",
"size R": 15,
"size L": 14,
"lastWeek": [{
"productOrderedForDate": ISODate("2020-01-28T18:30:00Z"),
"size R": 12,
"size L": 21,
}]
}
]
}
Напомним: 1. Я получу администратора id
с req.body
. 2. Я найду всех клиентов, сопоставленных с mappedCustomers
. 3. Я буду искать в orders
коллекциях заказы, которые mappedCustomers
создали на требуемые даты. 4. Мне нужно сгруппировать все size R
и size L
.
Мне удалось сделать 1,2,3, но я не могу получить требуемый результат для 4 и 5. Пожалуйста, посмотрите на и скажите, можно ли этого достичь.
Я уже просмотрел эту запись, но не смог заставить ее работать.