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

How to add reference of one schema to another in Mongoose and inserting data by json?

本文关键字:引用 数据 插入 json 模式 Mongoose 添加 另一个      更新时间:2023-09-26

我正在编写一个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只是ObjectId类型的一个简单字段,它存储一个类似对象522abc...的24个字符的十六进制字符串。

这个"参考"实际上是对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;
…