Как найти повторяющиеся поля в коллекции mongo.
Я хочу проверить, не дублируются ли какие-либо поля "name".
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Большое спасибо!
Как найти повторяющиеся поля в коллекции mongo.
Я хочу проверить, не дублируются ли какие-либо поля "name".
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Большое спасибо!
Ответы:
Используйте агрегацию на
name
и получитьname
сcount > 1
:Чтобы отсортировать результаты по наименьшему количеству дубликатов:
Чтобы использовать с другим именем столбца, кроме "name", замените " $ name " на " $ column_name "
источник
"$match": {"_id" :{ "$ne" : null }
- здесь не требуется, так как второй части оператора было бы достаточно для фильтрации результата. Так что достаточно проверить наличие группыcount > 1
._id
поле. Послеgroup
операции всегда гарантируется, что он не будет нулевым ._id
Документа от$group
стадии может быть пустым.Вы можете найти
list
изduplicate
имен с помощью следующегоaggregate
трубопровода:Group
все записи похожиеname
.Match
теgroups
, у кого записи больше1
.group
снова коproject
всем повторяющимся именам в виде файлаarray
.Код:
о / п:
источник
Ответ, данный anhic, может быть очень неэффективным, если у вас большая база данных, а имя атрибута присутствует только в некоторых документах.
Для повышения эффективности вы можете добавить в агрегирование $ match.
источник
Первая группа. Запросите группу в соответствии с полями.
Затем мы проверяем уникальный идентификатор и подсчитываем его. Если count больше 1, то поле дублируется во всей коллекции, так что это должно обрабатываться запросом $ match.
источник