#mongodb
#mongodb
Вопрос:
У меня есть MongoDB, как
{"currency_type":"alchemy", "currency_value": "0.13", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.13", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.14", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.14", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.16", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.16", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.16", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.13", "created_on": "1605975144322"}
и вот как должен выглядеть запрос
{"currency_type":"alchemy", "currency_value": "0.13", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.14", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.16", "created_on": "1605975144322"}
{"currency_type":"alchemy", "currency_value": "0.13", "created_on": "1605975144322"}
Я пробовал что-то подобное, но он удаляет все записи с одинаковым значением. Я хочу удалить только те записи, которые дублируются в строке.
DB.objects.aggregate([
{"$match": {"currency_type": "alchemy"}},
{"$group": {
"_id": {
"currency_value": "$currency_value"
},
"created_on": {"$first": "$created_on"},
"data": {"$first": "$$ROOT"},
"count": {"$sum": 1}
}},
{"$sort":{ "created_on" : 1 }}
])
Есть идеи, в каком направлении я могу пойти?
Спасибо!!
Ответ №1:
вы можете получить максимальное или минимальное значение _id для сохранения или удаления:
DB.objects.aggregate([
{"$match": {"currency_type": "alchemy"}},
{"$group": {
"_id": {
"currency_value": "$currency_value"
},
"created_on": {"$first": "$created_on"},
"data": {"$first": "$$ROOT"},
"count": {"$sum": 1},
"maxId": {$max:"$_id"}
}},
{"$sort":{ "created_on" : 1 }}
])