E11000 重复键错误收集 info.subs: null

Posted

技术标签:

【中文标题】E11000 重复键错误收集 info.subs: null【英文标题】:E11000 duplicate key error collection info.subs: nullE11000 重复键错误收集 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

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

【问题讨论】:

【参考方案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 站点并手动添加了一个集合,并且可能设置错误。我删除了它,让我的应用程序自己构建集合,它似乎工作正常。感谢您花时间提供帮助!一直很感激!

【讨论】:

以上是关于E11000 重复键错误收集 info.subs: null的主要内容,如果未能解决你的问题,请参考以下文章

E11000 重复键错误收集:ad-network.users 索引:username_1 重复键: : null

使用空数组添加新用户记录时出现“E11000 重复键错误收集”

E11000 重复键错误收集:db.products 索引:product_id_1 重复键: product_id:null

MongoError:E11000 重复键错误集合:annka.transactions 索引:assets_1 重复键::null

MongoError: E11000 重复键错误索引

插入期间:E11000 重复键错误索引