gpt4 book ai didi

node.js - 使用 MongoDB/Mongoose 使字段在一个模式中唯一,但在其他模式中不唯一

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:50 25 4
gpt4 key购买 nike

我正在使用 mongoDB 和 Mongoose 来构建 API。

我有两个(也许很快会有更多)模式:

user : {
name : String,
email : {
required: true,
unique : true
}
}

ticket : {
title : String,
author : userModel.schema,
}

每个用户都必须有一个唯一的电子邮件,因为他们将使用它作为登录凭据。每个用户都可以写票证,每次发送票证时,我都会在作者字段中添加写票证的用户对象。

到目前为止,每个用户只能写一张票,如果我尝试第二张票,则会出现此错误:

E11000 duplicate key error collection: BTB_DB.tickets index: author.email_1 dup key: { : "email@email.com"}

我发现 Mongo 实际上为票证创建了一个索引,以确保author.email 是唯一的,请参见下面我的 mongo 罗盘的屏幕截图:

mongocompass

该索引也仅存在于票证集合中,而不存在于用户集合中?该索引从哪里来?

我的问题是:是否可以保持电子邮件字段在用户架构中唯一,但在其他架构中不唯一?

如果没有,是否有其他方法将用户嵌套在票证中?我只尝试了一点 userId 和 mongoose 的填充方法,我应该在该解决方案上投入更多时间吗?我真的很想让用户留在票证中。

谢谢!

最佳答案

在票证中定义作者如下

ticket : {
title : String,
author : {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
}

当你获取票证时,如果你想获取票证所属的用户,请像这样使用 populate() ,

Ticket.find().populate('author');

并且当您创建票证时,请确保为作者字段提供用户的 _id

new Ticket({'title': 'title of the ticket', 'author':'_idOfTheUser'})

关于node.js - 使用 MongoDB/Mongoose 使字段在一个模式中唯一,但在其他模式中不唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com