mongooseForegin键映射

我是MongoDB / Mongoose的新手,试图弄清楚如何映射Schema之间的关系。 我不认为问题是.populate()。 在创build新用户和客户时,我看不到收集中反映的关系

用户(通过本地/社交login)有许多客户端。 一组客户属于1个用户

  1. 这是正确的方式来声明外键? {type:Schema.Types.ObjectId,ref:'Client'}
  2. Schema是否应该有彼此的外键相互联系?
  3. 创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"); }); } }); });