Это мой документ структура:MongoDB агрегат
{
"_id":ObjectId("548eb9fe8ad582f2f9976973"),
"RECNUM":"1008",
"ART_NR":"1014",
"ART_NRA":"10010700",
"ART_BEZ":{ },
"BES1":{ },
"markings":[ ],
"prices":[
{
"DATUM_VON":"2011-04-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"1.0000",
"PROZ_BETR":"4.2000"
},
{
"DATUM_VON":"2011-04-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"250.0000",
"PROZ_BETR":"3.5000"
},
{
"DATUM_VON":"2011-04-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"500.0000",
"PROZ_BETR":"3.4000"
},
{
"DATUM_VON":"2011-04-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"1000.0000",
"PROZ_BETR":"3.3000"
},
{
"DATUM_VON":"2011-04-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"2500.0000",
"PROZ_BETR":"3.2000"
},
{
"DATUM_VON":"2012-09-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"1.0000",
"PROZ_BETR":"5.4000"
},
{
"DATUM_VON":"2012-09-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"250.0000",
"PROZ_BETR":"4.5000"
},
{
"DATUM_VON":"2012-09-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"500.0000",
"PROZ_BETR":"4.3500"
},
{
"DATUM_VON":"2012-09-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"1000.0000",
"PROZ_BETR":"4.2000"
},
{
"DATUM_VON":"2012-09-01",
"DATUM_BIS":"",
"MENG_BETR_BIS":"2500.0000",
"PROZ_BETR":"4.1000"
}
] }
Мне нужно извлечь в массиве цен на документы, которые содержат максимальное значение даты. Таким образом, в этом случае все документы (4), которые имеют значение 2012-09-01 в качестве значения.
Я попытался это:
db.products.aggregate([
{ $match: {RECNUM: '1008'}},
{"$unwind": "$prices"},
{$match: { "$max": "$prices.DATUM_VON"}}
]);
Но это выдает ошибку, как я предполагаю, что я не могу использовать оператор $ макс в $ матче. Как я могу это достичь?
Будьте осторожны с типами. Все данные в вашем примере хранятся в виде строк, которые могут привести к тому, что некоторые операции будут работать не так, как ожидалось. Вы должны использовать объекты ISODate() для дат, если это вообще возможно. – Martin
@Martin Я согласен с общим настроем, но комментарий действительно не подходит для решения проблемы или требует уточнения, как должно быть. –