mongodb 允许空对象ID Mongoose,

np8igboo  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(237)

我有两个模型用户和公司。在用户中,我存储公司。_ID,将用户与公司相关联。我拥有这两种模型的CRUD功能,因为我可以创建用户并将其与公司相关联,也可以使用在将company._ID字段添加到用户之前创建的用户创建公司。我的问题是,当我尝试将表单中的company字段留空时,它会引发“用户验证失败:company:由于“BSONTypeError”,无法为路径“company”处的值“”(类型字符串)强制转换为ObjectId。
我需要一种方法,我可以先创建一个用户,然后创建一个公司,但在同一时间,如果该公司已经存在,能够与该公司注册。
这是我试图想出的基础上,它给我的结果,以及搜索的文件
在我的用户模型中,我将required设置为false

const { string } = require('joi');
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const passportLocalMongoose = require('passport-local-mongoose');
 
 
const UserSchema = new Schema({
 email:{
     type:String,
     required: true,
     unique: true
    },
 level: String,
 company: {
     type: Schema.Types.ObjectId,
     ref:'Companies',
     required: false
    },
 companyName: String
});
UserSchema.plugin(passportLocalMongoose);
  
module.exports = mongoose.model('User', UserSchema);

在我的表单中没有验证。

oo7oh9g9

oo7oh9g91#

因此,您得到的错误告诉您一些事情。您得到错误不是因为您忽略了字段,而是因为您将空字符串赋给字段。您需要进入创建用户的位置,并且仅在company的值是有效的对象ID时才将值赋给company。
潜在问题代码示例:

function createUser(info){
    newUser = new User({email: info.email, company: info.company})
    newUser.save()
}

固定代码示例:

function createUser(info){
    newUser = new User({})
    if(!info.email){
        throw new Error("Email must be provided")
    }
    newUser.email = info.email
    if(info.company){
        newUser.company = info.company
    }
    newUser.save()
}

我不确定你是在哪里做的,如果你用你用来创建用户的文件编辑你的帖子,在这个答案上留下评论,我会看一看,但是我保证你在某个时候给user.company分配了一个空字符串。

相关问题