Проблема: я пытаюсь сделать запрос на MongoDB, но я использую DocumentDb из amazon, где некоторые операции не поддерживаются. Я хотел найти альтернативу, чтобы получить тот же результат, если это возможно. По сути, я хочу изменить root результата, вместо того, чтобы быть первой сущностью, мне нужно, чтобы это было некоторое слияние некоторых значений на разных уровнях документа.
Итак, у меня есть следующая структура в моей коллекции:
{
"_id" : ObjectId("5e598bf4d98f7c70f9aa3b58"),
"status" : "active",
"invoices" : [
{
"_id" : ObjectId("5e598bf13b24713f50600375"),
"value" : 1157.52,
"receivables" : [
{
"situation" : {
"status" : "active",
"reason" : []
},
"rec_code" : "001",
"_id" : ObjectId("5e598bf13b24713f50600374"),
"expiration_date" : ISODate("2020-03-25T00:00:00.000Z"),
"value" : 1157.52
}
],
"invoice_code" : 9773,
"buyer" : {
"legal_name" : "test name",
"buyer_code" : "223132165498797"
}
},
],
"seller" : {
"code" : "321654897986",
"name" : "test name 2"
}
}
Чего я хочу добиться, это перечислить всю "дебиторскую задолженность" следующим образом, где _id - это _id дебиторской задолженности:
[{
"_id" : ObjectId("5e598bf13b24713f50600374"),
"situation" : {
"status" : "active",
"reason" : []
},
"rec_code" : "001",
"expiration_date" : ISODate("2020-03-25T00:00:00.000Z"),
"value" : 1157.52,
"status" : "active",
"seller" : {
"cnpj" : "321654897986",
"name" : "test name 2"
},
"invoice_code" : 9773.0,
"buyer" : {
"legal_name" : "test name",
"cnpj" : "223132165498797"
}
}]
Это можно сделать с помощью $ replace Root в запросе ниже на MongoDB, но с использованием documentDB я не могу использовать $ replace Root или $ mergeObjects. Знаете ли вы, как я могу получить такой же результат с другими операторами?:
db.testCollection.aggregate([
{ $unwind: "$invoices" },
{ $replaceRoot: {
newRoot: {
$mergeObjects: ["$$ROOT","$invoices"]}
}
},
{$project: {"_id": 0, "value": 0, "created_at": 0, "situation": 0}},
{ $unwind: "$receivables" },
{ $replaceRoot: {
newRoot: {
$mergeObjects: ["$receivables", "$$ROOT"]
}
}
},
{$project:{"created_at": 0, "receivables": 0, "invoices": 0}}
])