【问题标题】:Inserting data to MongoDB from one schema module to another将数据从一个模式模块插入到另一个模式模块
【发布时间】:2019-07-18 20:38:54
【问题描述】:

我在 Mongoose 中使用 MongoDB,我必须将用户数据保存到 users 集合,其中包含 用户名、密码和公司数据,*公司数据将具有 公司名称、地址和网站 URL 现在我所做的是为公司和用户创建了不同的架构

例如,在将用户数据安装到公司集合后,我需要将用户数据与公司 ID 一起存储。

{
  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);
}

公司架构是(company.js):

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:\MoshiMoshi\Projects\Maaamamia\blackhole-rest\models\users.js:17
        type: [{ type: ObjectId, ref: 'Company' }],
                       ^

ReferenceError: ObjectId is not defined

如何实现该功能?

【问题讨论】:

    标签: node.js express mongoose mongoose-schema population


    【解决方案1】:

    首先,在您的用户架构中,公司不应是数组,因为根据您的要求,用户将只有一个公司 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多