【问题标题】:How to add reference of one schema to another in Mongoose and inserting data by json?如何在 Mongoose 中将一个模式的引用添加到另一个模式并通过 json 插入数据?
【发布时间】:2015-09-14 06:31:04
【问题描述】:

我正在编写一个 node.js 应用程序,其中有两个猫鼬模式 WalletUser

  • 我想添加 Wallet 作为对用户的引用 并从 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 会是什么样子?

【问题讨论】:

    标签: javascript node.js mongodb mongoose postman


    【解决方案1】:

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

    User 而言,user.wallet 只是一个 ObjectId 类型的简单字段,它存储一个 24 字符的十六进制字符串对象: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;
    …
    

    【讨论】:

    • 好的,我知道了。现在你能给我一个我可以发布的示例 json 吗?我想看看json结构..怎么在json里传钱包。
    • 我其实没看懂那部分。您能否详细说明或提供一些背景信息?你的意思是你的req.body.wallet 应该是什么样子?或者您是在谈论通过res.json 将其发送给客户?
    • 是的,我的意思是 req.body.wallet 在 json 中发帖时的样子。例如。 { "userId": "xxyyzz", "password": "12345", "name": "Utsav", "isAdmin": "true", "wallet": 这是我的困惑..怎么写钱包json }
    • 它应该与您在架构中定义它的方式完全相同。 { money: 123 }。如果您的表单中只有一个money 字段(即req.body.money),那么您将使用var wallet = new Wallet({money: req.body.money})。主要的事情仍然是它应该与您在架构中定义它的方式完全相同,就像您创建user 的方式就是您创建wallet 的方式一样。然后简单地user.wallet = wallet.id
    • 好的,知道了。感谢您的帮助!
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 2019-07-18
    • 2015-05-18
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多