由于某种原因,我的应用不允许我创建多个配置文件。服务文件中的设置如下:
//这将查找配置文件是否存在
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
我在这里查看了其他类似问题的答案,但找不到适合该项目的地方。任何帮助都会很棒。谢谢!
答案 0 :(得分:0)
TownMiner.profiles
上的{info.subs:1}
集合中有一个唯一索引。
该示例文档不包含info
字段,因此在该文档的索引中输入的值为null
。
由于索引被标记为唯一,因此mongod不允许您使用info.subs
插入也会输入到null
索引中的任何其他文档。
答案 1 :(得分:0)
发现错误是因为我在mongoDB网站上手动添加了一个集合,并且可能将其设置为错误。我删除了它,然后让我的应用程序自己构建了集合,它似乎运行正常。多谢您抽出宝贵时间提供协助!一直很感激!