Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Mongoose中添加一个模式对另一个模式的引用,并通过json插入数据?_Javascript_Node.js_Mongodb_Mongoose_Postman - Fatal编程技术网

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

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

我正在编写一个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 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就可以了。谢谢你的帮助!