如何在Mongoose中添加一个模式的引用到另一个模式并通过json插入数据?

我正在写一个node.js应用程序,我有两个mongoose模式电子钱包用户

  • 我想添加电子钱包作为参考用户,并从POSTMAN传递合适的JSON。 这就像在OOP中添加另一个类的引用和RDBMS中的外键概念一样。

我写了这样的模式:

user.js的

var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ userId: {type: String}, isAdmin: {type: Boolean, default: false}, password: {type: String}, name: {type: String}, wallet: {type: mongoose.Schema.Types.ObjectId, ref: 'Wallet'} //see here }); module.exports = mongoose.model('User', userSchema); 

我上面引用钱包的方式是正确的吗? 如果没有,你能告诉我正确的方法吗?

wallet.js

 var mongoose = require('mongoose'); var walletSchema = new mongoose.Schema({ money: {type: Number, default: 0, min: 0}, }); module.exports = mongoose.model('Wallet', walletSchema); 

以下是我的用户路由文件。

userRoute.js

 router.route('/user') .post(function (req, res) { var user = new User(); user.userId = req.body.userId; user.password = req.body.password; user.name = req.body.name; user.isAdmin = req.body.isAdmin; user.wallet = req.body.wallet; // see here user.save(function(err, user){ if(err){ res.json({ message: 'Failure' }); return false; } res.json({ message: 'Success' }); }); }) 

我已经将钱包分配给用户对象的方式是否正确? 如果不是,你能告诉我正确的方法吗?

现在我想从Postman发布原始的json。 json会是什么样子?

user.wallet = req.body.wallet将不起作用。

User而言, user.wallet只是ObjectIdtypes的一个简单字段,它存储一个24字符hexstringtypes的对象: 522abc...

这个“参考”实际上是对mongoose的更高级的解释。

这就是为什么你不能直接做user.wallet = req.body.wallet 。 你必须这样做:

 var user = new User(); … // user.wallet = req.body.wallet; // won't work var wallet = new Wallet(req.body.wallet) // because Wallet too is a Schema just like User user.wallet = wallet.id; …