将数据从一个模式模块插入到另一个模式模块 MongoDB
Inserting data to MongoDB from one schema module to another
我将 MongoDB 与 Mongoose 一起使用,我必须将用户数据保存到 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) 是:
常量猫鼬=要求('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 传递给它,它应该 save/create 用户连同公司。公司ID应该保存在用户集合的公司属性中。如果我确实获得了用户,那么它应该 return 用户数据和使用保存在数据库中的 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
如何实现该功能?
首先,在您的用户架构中,公司不应该是一个数组,因为根据您的要求,用户将只有一个公司 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
我将 MongoDB 与 Mongoose 一起使用,我必须将用户数据保存到 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) 是:
常量猫鼬=要求('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 传递给它,它应该 save/create 用户连同公司。公司ID应该保存在用户集合的公司属性中。如果我确实获得了用户,那么它应该 return 用户数据和使用保存在数据库中的 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
如何实现该功能?
首先,在您的用户架构中,公司不应该是一个数组,因为根据您的要求,用户将只有一个公司 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