Пример моих данных:
[{"name":"Matthew","position":Nan,"age":26},
{"name":"Alice","position":"DA","age":30},
{"name":"Matthew","position":Nan,"age":26},
{"name":"Alice","position":"DA","age":30}]
Приведенные ниже коды группируют мои данные на основе «имени» и «возраста», берут только первый экземпляр и, наконец, заполняют коллекцию только уникальными документами.
Database.collection.aggregate(
[
{ "$sort": { "_id": 1 } },
{ "$group": {
"_id": [{"name":"$name"},{"position":"$position"}],
"doc": { "$first": "$$ROOT" }
}},
{ "$replaceRoot": { "newRoot": "$doc" } },
{ "$out": collection }
],allowDiskUse=True)
Я ожидал, что в коллекции будет только два документа с "именем", как у Мэтью и Алисы, вот так:
[{"name":"Matthew","position":Nan,"age":26},
{"name":"Alice","position":"DA","age":30}]
Вместо этого я получил что-то вроде этого
[{"name":"Matthew","position":Nan,"age":26},
{"name":"Alice","position":"DA","age":30},
{"name":"Matthew","position":Nan,"age":26}]
Вы видите, что моим кодам не удалось распознать документы "Мэтью" как уникальные, если поля имеют значения Nan. Что мне нужно изменить в моих кодах, чтобы они работали как положено? Заранее спасибо!
* Примечание. Единственный другой вариант, который я могу теперь сделать, - это прочитать всю коллекцию как фрейм данных с Pandas и использовать .drop_duplicates, а затем отправить ее обратно в Mongodb, что очень дорого.