Вот мой запрос
db.orders.aggregate([
{
'$match': {
'date': ISODate("2020-02-11T18:30:00Z")
}},
{
'$unwind': {
'path': '$orders',
}},
{
$lookup:
{
from: 'retailprice',
let: { productCode: '$orders.productCode' },
pipeline: [
{
$match: {
frequency: 'FR',
$expr: {
$eq: ["$productCode", "$$productCode"]
}
}
}
], as: 'retailprices'
}
},
{ '$unwind': '$retailprice' },
{
$lookup:
{
from: 'discounts',
let: { productCode: '$orders.productCode' },
pipeline: [
{
$match: {
frequency: 'FR',
$expr: {
$eq: ["$productCode", "$$productCode"]
}
}
}
], as: 'discounts'
}},
{ '$unwind': '$discounts' },
{
'$project':{
'productCode':'$orders.productCode' ,
'vendorId':'$vendorId',
'dealerId':'$dealerId',
'quantity':'$orders.quantity'
}
},{'$merge':'test'}
]).pretty()
Таким образом, результат этого запроса без {'$merge':'test'}
:
{
"_id" : ObjectId("5e3a710af2657521e8c5668a"),
"productCode" : "TCE1",
"vendorId" : ObjectId("5e3d05ba964d0e06c4bb0f07"),
"dealerId" : ObjectId("5e1d82156a67173cb877f67d"),
"quantity" : 30,
}
{
"_id" : ObjectId("5e3a710af2657521e8c5668a"),
"productCode" : "ECE1",
"vendorId" : ObjectId("5e3d05ba964d0e06c4bb0f07"),
"dealerId" : ObjectId("5e1d82156a67173cb877f67d"),
"quantity" : 67,
}
Но когда я использую {'$merge':'test'}
, чтобы сохранить вывод в Новая коллекция сохраняет только один документ:
{
"_id" : ObjectId("5e3a710af2657521e8c5668a"),
"dealerId" : ObjectId("5e1d82156a67173cb877f67d"),
"productCode" : "ECE1",
"quantity" : 67,
"vendorId" : ObjectId("5e3d05ba964d0e06c4bb0f07")
}
. Почему это так? Я предполагаю, потому что "_id":ObjectId("5e3a710af2657521e8c5668a")
одинаково в обоих документах, если проверяется вывод запроса, если это так, как его можно решить. Как можно сохранить оба документа с помощью $merge
, я не хочу использовать $out
, поскольку он заменяет весь документ при каждом повторном выполнении запроса, или, скорее, как я могу сохранить все извлеченные документы в новую коллекцию