Ошибка Parse-Server при инициализации: «Попытка обеспечить уникальность поля для класса, в котором уже есть дубликаты». - PullRequest
0 голосов
/ 11 мая 2018

Редактировать: Решено ниже. Заметка для сопровождающих репо, которую я знаю, просмотрите здесь: я заметил, что многие из оскорбительных пользователей очень старые. Они из того, когда мы разветвили базу данных давным-давно. Я не уверен, что изменилось, но что-то произошло, не требуя обновления npm, что привело к появлению этой ошибки. Эти пользователи годами дублировались в нашей базе данных, но мы только начали получать это исключение вчера. Не уверен, стоит ли рассматривать эту «проблему» или это является результатом решения проблемы.

Я нашел несколько похожих вопросов, но они связаны с ошибками аутентификации, которых у меня нет.

Я нажал на сообщение об ошибке выше для электронной почты и имени пользователя, что неудивительно, потому что я использую электронную почту пользователя в качестве имени пользователя. Что удивительно, так это то, что это сообщение об ошибке начинает появляться вчера в полдень после того, как я не внесу никаких изменений, и я могу определить источник проблемы. Не было создано ни одного нового пользователя с повторяющимся адресом электронной почты / именем пользователя, и я не смог изменить имя пользователя или адрес электронной почты через parse-dashboard или API, чтобы они были дубликатами.

Как ни странно, это происходит как на производственных, так и на тестовых серверах, причем оба запускались одновременно. Один был дубликатом другого, но разветвление было три года назад.

Есть идеи, где я могу попытаться решить эту проблему? Кажется, это не мешает работе сервера, но я получаю необработанную точку прерывания исключения, запускающуюся каждый раз, когда я запускаю свой сервер отладки.

Я изучал совокупность Монго, используя это руководство в качестве основы: https://www.compose.com/articles/finding-duplicate-documents-in-mongodb/

Однако, когда я пытаюсь db.User.aggregate([{$group: { _id: {username: "$email"}, uniqueIds: {$addToSet: "$_id"}, count: {$sum: 1}}}, {$match: { count: {"$gt": 1}}}]); ничего не появляется, и если я делаю _User (фактическое имя коллекции), я получаю ошибку E QUERY TypeError: Cannot call method 'aggregate' of undefined

Для более четкого форматирования:

db._User.aggregate( [ { $group:{ _id: { username: "$email" }, uniqueIds: { $addToSet: "$_id" }, count: { $sum: 1 } } }, { $match: { count: { "$gt": 1 } } } ] );

У кого-нибудь есть советы, как я могу выяснить, где находятся эти дубликаты или почему я только сейчас получаю эту ошибку?

1 Ответ

0 голосов
/ 11 мая 2018

Оболочке Mongo не нравятся все имена коллекций, поэтому они недоступны.Я просто должен был использовать .getCollection () вместо .collection, и он работал отлично!

db.getCollection("_User").aggregate( [ { $group:{ _id: { username: "$email" }, uniqueIds: { $addToSet: "$_id" }, count: { $sum: 1 } } }, { $match: { count: { "$gt": 1 } } } ] );

...