E11000重复键错误集合{info.subs:null}

时间:2020-08-18 19:14:22

标签: mongodb mongoose

由于某种原因,我的应用不允许我创建多个配置文件。服务文件中的设置如下:

//这将查找配置文件是否存在

async getProfile(user) {
    let profile = await dbContext.Profile.findOne({
      email: user.email
    });
    profile = await createProfileIfNeeded(profile, user);
    await mergeSubsIfNeeded(profile, user);
    return profile;
  }

//这应该创建一个,如果不存在的话

async function createProfileIfNeeded(profile, user) {
  if (!profile) {
    profile = await dbContext.Profile.create({
      ...user,
      subs: [user.sub]
    });
  }
  return profile;
}

它适用于第一个用户,但是当我创建另一个用户时,出现错误: {“错误”:{“消息”:“ MongoError:E11000重复键错误集合:TownMiner.profiles索引:info.subs_1 dup键:{info.subs:null}”,“状态”:400},“ url”: “ / api / profile”}

令人困惑的是,通过Auth0设置了子项。当我在服务器中使用断点查看它时,它会显示那里的所有信息。另外,当我查看MongoDB集合时,也没有地方说任何值均为“ null”。我现在对几个项目使用了相同的设置,并且它们都运行良好(并且这个新项目是从同一模板中克隆的)。还要注意确保子信息完全不同。

这是MongoDB集合:

_id: ObjectId("***")
subs:Array
0:"auth0|***dda6a"
1:"auth0|***aa288
name:"kevin@test.com"
picture:"https://s.gravatar.com/avatar/c6788456e2639d2d10823298cc219aaf?s=480&r..."
email:"kevin@test.com"
createdAt:2020-08-07T21:23:05.867+00:00
updatedAt:2020-08-17T17:24:05.583+00:00
__v:1

我在这里查看了其他类似问题的答案,但找不到适合该项目的地方。任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:0)

TownMiner.profiles上的{info.subs:1}集合中有一个唯一索引。

该示例文档不包含info字段,因此在该文档的索引中输入的值为null

由于索引被标记为唯一,因此mongod不允许您使用info.subs插入也会输入到null索引中的任何其他文档。

答案 1 :(得分:0)

发现错误是因为我在mongoDB网站上手动添加了一个集合,并且可能将其设置为错误。我删除了它,然后让我的应用程序自己构建了集合,它似乎运行正常。多谢您抽出宝贵时间提供协助!一直很感激!