首页 > 解决方案 > 初始化时解析服务器错误:“试图确保已经有重复的类的字段唯一性。”

问题描述

编辑:在下面解决。给我认识的 repo 维护者的注释在这里浏览:我注意到许多有问题的用户都很老。它们来自我们很久以前分叉数据库的时候。我不确定发生了什么变化,但在不需要 npm 更新的情况下发生了一些变化,导致此错误开始出现。这些用户多年来一直在我们的数据库中重复,但我们昨天才开始收到此异常。不确定这是否是一个值得研究的“问题”,或者它是否是问题得到解决的结果。

我发现了一些类似的问题,但它们是由于身份验证错误,我没有遇到。

我为电子邮件和用户名都点击了上述错误消息,这并不奇怪,因为我使用用户的电子邮件作为他们的用户名。令人惊讶的是,在没有任何更改之后,昨天中午开始出现此错误消息,我可以将其确定为问题的根源。没有创建具有重复电子邮件/用户名的新用户,并且我无法通过 parse-dashboard 或 API 将用户名或电子邮件更改为重复。

更奇怪的是,这发生在生产服务器和测试服务器上,两者同时启动。一个曾经是另一个的副本,但叉子是三年前的。

有什么想法可以开始尝试解决这个问题吗?它似乎并没有阻止服务器运行,但是每次启动调试服务器时都会触发未捕获的异常断点。

我正在研究 mongo 以本指南为基础的总体情况: 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 } } } ] );

任何人都有关于如何找出这些重复项在哪里或为什么我现在刚刚收到此错误的提示?

标签: mongodbparse-server

解决方案


Mongo shell 并不喜欢所有集合名称,因此它们不可访问。我只需要使用 .getCollection() 而不是 .collection,而且效果很好!

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


推荐阅读