将数据从一个模式模块插入到另一个模块



我正在使用mongodb和mongoose,我必须将用户数据保存到 users 收集,其中包含用户名,密码和公司 data, *公司数据将具有公司名称,地址和网站URL 现在我做的是,我已经为公司和用户创建了不同的模式

我需要将用户数据与公司ID 一起存储在公司集合中后,对于Ex。

{
  username: "Lorem Ipsum",
  password: "Dolar Sit",
  company: "5c73afcf9a3bde1a40da5184"
}

类似的东西(注意:随机字符串是公司数据的ID),但是我将在1个对象中发送所有内容,如

{
  username: "Lorem Ipsum",
  password: "Dolar Sit",
  company: {
     company_name: "Blah Blah",
     company_address: "Blah Blah Blah",
     company_website: "BlahBlah.com",
  }
}

我的用户架构(user.js)是:

const mongoose = require('mongoose');

const Company = require('./company');
Schema = mongoose.Schema
// User Schema
const userSchema = mongoose.Schema({
    username:{
        type: String,
        required: true
    },
    password:{
        type: String,
        required: true
    },
    company:{
        type: [{ type: Schema.Types.ObjectId, ref: 'Company' }],
        required: true
    },
    created_on:{
        type: Date,
        default: Date.now
    },
    updated_on:{
        type: Date,
        default: Date.now
    }
});
const User = module.exports = mongoose.model('Users', userSchema);
// Add User
module.exports.addUser = (user, callback) => {
    User.create(user, callback);
}

和公司模式是(公司。):

const mongoose = require('mongoose');
// Book Schema
const companySchema = mongoose.Schema({
    company_name:{
        type: String
    },
    target_address:{
        type: String
    },
    target_website:{
        type: String
    },
    created_on:{
        type: Date,
        default: Date.now
    },
    updated_on:{
        type: Date,
        default: Date.now
    }
});
const Company = module.exports = mongoose.model('Company', companySchema);
// Add Company
module.exports.addCompany = (comp, callback) => {
    Company.create(comp, callback);
}

现在我的问题是我是否运行Users.addUser功能,并将上述JSON传递给它,它应该与公司一起保存/创建用户。并应将公司ID保存在用户收集的公司属性中。如果我确实获取用户,则应使用保存在数据库中的该ID获取的公司数据返回用户数据

如何做?

如果我运行上述文件并尝试将数据插入到其中,它将显示以下错误

 'Cast to Array failed for value "{ company_name: 'Moshi Moshi', company_address: 'Bengaluru' }" at path "company"',
        name: 'CastError',
        stringValue:
         '"{ company_name: 'Moshi Moshi', company_address: 'Bengaluru' }"',
        kind: 'Array',
        value: [Object],
        path: 'company',
        reason: [MongooseError] } },
  _message: 'Users validation failed',
  name: 'ValidationError' }
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
E:MoshiMoshiProjectsMaaamamiablackhole-restmodelsusers.js:17
        type: [{ type: ObjectId, ref: 'Company' }],
                       ^
ReferenceError: ObjectId is not defined

如何实现该功能?

首先,您的用户模式公司中的所有内容不应是一个数组,因为用户只能根据您的要求具有单个公司ID。

 //incorrect
 company:{
    type: [{ type: Schema.Types.ObjectId, ref: 'Company' }],
    required: true
 },
 //correct
  company:{
     type: Schema.Types.ObjectId, 
     ref: 'Company',
     required: true
 },

和第二个添加用户时,您将整个公司对象传递给公司属性。首先,您应该添加公司,然后将保存的公司对象的_id存储到用户的公司属性中,然后保存用户对象。

let yourJsonObject={
  username: "Lorem Ipsum",
  password: "Dolar Sit",
  company: {
     company_name: "Blah Blah",
     company_address: "Blah Blah Blah",
     company_website: "BlahBlah.com",
  }
}
      let companyObject=yourJsonObject.company;//your company object 
      let userObject= yourJsonObject //your user object
       let savedCompanyObject= //call add company method of your 
                                 //model with companyObject data
       userObject.company = savedCompanyObject._id;
      //now pass userObject to your addUser method of user model

最新更新