I want to get active users items using two collections of mongoDB

Viewed 39

In my project, I have a user and item collection. I have maintained the active_status of users. I want to get active users' items using user and item collection.

Item Collection

const item_model =new mongoose.Schema({
    user_id:{
        type: mongoose.Schema.Types.ObjectId,
        ref: user,
        require: true,
    },
    category: {
        type: String,
        require: true,
    },
    name: {
        type: String,
        require: true,
    },
    price: {
        type: Number,
        require: true,
    },
    stock: {
        type: Number,
        require: true,
    }
}

User Collection

var user = new Schema({
    firstName:{
        type: String,
        require: true
    },
    lastName:{
        type: String,
        require: true
    },
    email:{
        type: String,
        require: true
    },
    password:{
        type: String,
        require: true
    },
    user_status:{
        type: String,
        require: true,
        default: 1
    }

}

can I join these two tables and get active users items?

1 Answers

Your Item Collection should be

const item_model =new mongoose.Schema({
    user_id:{
        type: mongoose.Schema.Types.ObjectId,
        ref: user,
        require: true,
    },
    category: {
        type: String,
        require: true,
    },
    name: {
        type: String,
        require: true,
    },
    price: {
        type: Number,
        require: true,
    },
    stock: {
        type: Number,
        require: true,
    }
}

and your user collection should be

var user = new Schema({
    user_id:{
        type: mongoose.Schema.Types.ObjectId,
        require: true,
    },
    firstName:{
        type: String,
        require: true
    },
    lastName:{
        type: String,
        require: true
    },
    email:{
        type: String,
        require: true
    },
    password:{
        type: String,
        require: true
    },
    user_status:{
        type: String,
        require: true,
        default: 1
    }
}

Now lets fetch the active users from the user data model

const _ = require('lodash')
const userQuery = {
   user_status: 'active'
}

const activeUsers = await userDataModel.find(userQuery);

//Now extract only user_ids from activeUsers Object

if(activeUsers && activeUsers.length>0){
   const user_ids = _.map(activeUsers, 'user_id');
   // once you get user_ids for all active users now lets create the query to fetch items for all active users
   const itemsQuery = {
      user_id: {$in: user_ids}
   }
   const itmesData = await itemsDataModel.find(itemsQuery); 
   if(itmesData) {
      return itmesData;
   } else {
      return "Items data not found"
   }
} else {
   return "Active users not found"
}
Related