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
数组的对象,则将值放在那里并保留现有索引。
我对@987654321@ 的阅读表明,具有 $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