mongooseForegin键映射
我是MongoDB / Mongoose的新手,试图弄清楚如何映射Schema之间的关系。 我不认为问题是.populate()。 在创build新用户和客户时,我看不到收集中反映的关系
用户(通过本地/社交login)有许多客户端。 一组客户属于1个用户
- 这是正确的方式来声明外键? {type:Schema.Types.ObjectId,ref:'Client'}
- Schema是否应该有彼此的外键相互联系?
- 创build用户/客户端以使外键数据显示时是否需要额外的代码? 我读了一些关于populate()
用户
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ local: { id: String, email: String, password: String, name: String, mobile: String, clients: {type: Schema.Types.ObjectId, ref: 'Client'} }, google: { id: String, token: String, email: String, name: String, clients: {type: Schema.Types.ObjectId, ref: 'Client'} } }); module.exports = mongoose.model('User', userSchema);
客户
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var clientSchema = new Schema({ id: String, firstname: String, lastname: String, mobile: String, user: {type: Schema.Types.ObjectId, ref: 'User'} }); module.exports = mongoose.model('Client', clientSchema);
创build用户
app.post("/api/user", function (req, res) { const user = req.body; console.log(user); User.findOne({ 'local.email': user.email }, function (err, result) { if (err) { console.log(err); handleError(err, res); return; } if (result) { res.status(500).send("Email already exists in database"); } else { var newUser = new User(); newUser.local.password = generateHash(user.password); newUser.local.email = user.email; newUser.local.name = user.name; newUser.local.mobile = user.mobile; newUser.save(function (err, result) { res.status(201).send("User added to database"); }); } }); });
创build客户端
app.post("/api/client", function (req, res) { const client = req.body; console.log(client); Client.findOne({ $and: [ { firstname: client.firstname }, { lastname: client.lastname } ] }, function (err, result) { if (err) { console.log(err); handleError(err, res); return; } if (result) { res.status(500).send({msg:"Client already exists in database"}); } else { var newClient = new Client(); newClient.firstname = client.firstname; newClient.lastname = client.lastname; newClient.mobile = client.mobile; newClient.save(function (err, result) { res.status(201).send("Client added to database"); }); } }); });