【问题标题】:E11000 duplicate key error collection {info.subs: null}E11000 重复键错误收集 {info.subs: null}
【发布时间】:2020-12-08 00:42:32
【问题描述】:

出于某种原因,我的应用不允许我创建多个个人资料。这是服务文件中的设置:

//如果存在则查找配置文件

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;
}

它适用于第一个用户,但是当我创建另一个用户时,我收到错误: {"error":{"message":"MongoError: E11000 duplicate key error collection: TownMiner.profiles index: info.subs_1 dup key: { info.subs: null }","status":400},"url": "/api/profile"}

令人困惑的是,subs 是通过 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

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

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么将这个添加到 createProfileIfNeeded 函数的帮助?:user.info.subs = user.subs?
    • 如果您希望字段名称为subs 并且在用户中是唯一的,请将索引放在info.subs 上并在subs 上创建它。如果您希望有一个 info 数组或包含 subs 数组的对象,则将值放在那里并保留现有索引。
    • 我对@9​​87654321@ 的阅读表明,具有 {$exists:true} 条件的部分索引可以作为替代方案,无需更改数据。
    【解决方案2】:

    原来错误是因为我去了 mongoDB 站点并手动添加了一个集合,并且可能设置错误。我删除了它,让我的应用程序自己构建集合,它似乎工作正常。感谢您花时间提供帮助!一直很感激!

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2016-08-17
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2021-10-25
      • 2021-11-04
      相关资源
      最近更新 更多