Javascript 如何在Mongoose中添加一个模式对另一个模式的引用,并通过json插入数据?
我正在编写一个node.js应用程序,其中有两个mongoose模式钱包和用户模式Javascript 如何在Mongoose中添加一个模式对另一个模式的引用,并通过json插入数据?,javascript,node.js,mongodb,mongoose,postman,Javascript,Node.js,Mongodb,Mongoose,Postman,我正在编写一个node.js应用程序,其中有两个mongoose模式钱包和用户模式 我想添加钱包作为对用户的引用,并从邮递员那里传递适当的json。这就像在OOPs中添加一个类在另一个类中的引用,在RDBMS中添加外键概念 我编写了如下模式: var user = new User(); … // user.wallet = req.body.wallet; // won't work var wallet = new Wallet(req.body.wallet) // because W
- 我想添加钱包作为对用户的引用,并从邮递员那里传递适当的json。这就像在OOPs中添加一个类在另一个类中的引用,在RDBMS中添加外键概念
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;
…
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);
var mongoose = require('mongoose');
var walletSchema = new mongoose.Schema({
money: {type: Number, default: 0, min: 0},
});
module.exports = mongoose.model('Wallet', walletSchema);
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' });
});
})
是我上面提到钱包的方式,对吗?如果没有,你能告诉我正确的方法吗
wallet.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);
var mongoose = require('mongoose');
var walletSchema = new mongoose.Schema({
money: {type: Number, default: 0, min: 0},
});
module.exports = mongoose.model('Wallet', walletSchema);
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' });
});
})
以下是我的用户路由文件
userRoute.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);
var mongoose = require('mongoose');
var walletSchema = new mongoose.Schema({
money: {type: Number, default: 0, min: 0},
});
module.exports = mongoose.model('Wallet', walletSchema);
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
只是ObjectId类型的一个简单字段,它存储一个24字符的十六进制字符串状对象:522abc…
这个“参考”实际上是对猫鼬的更高层次的解释
这就是为什么不能直接执行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;
…
好的,我有这个部分。现在你能给我一个我可以发布的json示例吗?我想看看json的结构。如何在json中传递钱包。我实际上不理解这一部分。你能详细说明一下吗?你的意思是你的
req.body.wallet
应该是什么样子?或者您正在谈论使用res.json
将其发送给客户端?是的,我指的是在json中发布时req.body.wallet的样子。例如{“userId”:“xxyyz”,“password”:“12345”,“name”:“Utsav”,“isAdmin”:“true”,“wallet”:这是我的困惑..如何编写这个wallet json}它应该与您在模式中定义它的方式完全一致<代码>{money:123}。如果您的表单中只有一个money
字段(即req.body.money
),那么您将执行var wallet=newwallet({money:req.body.money})
。重要的是,它应该与您在模式中定义它的方式完全相同,就像您创建用户
的方式是创建钱包
的方式一样。然后简单地user.wallet=wallet.id
Ok就可以了。谢谢你的帮助!