Search code examples
node.jsmongodbexpressmongoosemongoose-schema

relational schema node.js mongodb


I'm making an API with Node.js which is for a money management App. I have my user schema as the following:

const userSchema = new mongoose.Schema({
name: {
    type:String,
    required: true
},
email:{
    type: String,
    required: true,
    uniqe:true
},
password:{
    type:String,
    required: true
},

budget:{
    type:String ,
    required: true
},
currency: {
    type: String,
    required: true },

spendings: {
    type: mongoose.Schema.Types.ObjectId,
    ref:'Spendings'},

purchases :{
    type: mongoose.Schema.Types.ObjectId,
    ref:'Purchases'},

debts: {
    type: mongoose.Schema.Types.ObjectId,
    ref:'Debts'} 
});
module.exports = mongoose.model('User', userSchema);

What I'm trying to do is get all the users' Debts (for example) but I couldn't figure it out. I only was able to create and get Debts with the userID. This is my Debts Schema:

const debtsSchema = new mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
debtsName:{
    type:String,
    required:true
},
price:{
    type:Number,
    required:true
},
userID: {
    type: mongoose.Schema.ObjectId,
    ref: 'User',
    required: true
  }

  },
  {timestamps:true}
  );

  module.exports = mongoose.model('Debts', debtsSchema);

AuthController

exports.getOneUser = (req, res, next) => {
const id = req.params.userID;
User.findById(id).populate('spendings').populate('debts').populate('purchases')
.then(doc => {
    if(doc) {
        console.log("From database", doc);
        res.status(200).json(doc);
    } else {
        res.status(404).json({
            message: "No data is found by provided ID"
        });
    }
})
.catch(err => {
    console.log(err);
    res.status(500).json({
        error: err
    });
})
}

Please note that I am new o Node.js and explain in detail. Thanks in advance


Solution

  • If you want to get Debts data of a particular user, write a query on debts collection using userID.

    Debts.find({userID: id})
    

    If you want all the users data with their corresponding debts data,

    User.find({}).populate('debts')