Mongoose model schema referencing not working - Ecommerce model

Viewed 435

I am creating multi vendor ecommerce platform, with the following schema.

var user = new Schema(
{
    uid: { type: String, index: true, unique: true },
    firstName: { type: String, required: true, default: null },
    lastName: { type: String, default: null, default: null },
    userEmail: { type: String, unique: true, required: true, lowercase: true, },
    userProfileImg: { type: String, required: true, default: null },
    userDesignation: { type: String, default: null },
    userMobile: { type: Number, required: true, default: null },
    products: { type: Schema.Types.ObjectId, ref: 'Product' },
  }
);

var product = new Schema(
    {
        sku: { type: String, required: true, unique: true },
        title: { type: String, required: true },
        category: { type: Array, default: [] },
        images: { type: Array, default: [], },
        groups: { type: Array, default: [], },
        price: { type: Number, default: null, },
        unit: { type: String, default: null, },
        quantity: { type: Number, default: null, },
        description: { type: String, default: null, },
    },
);

var AllUser = mongoose.model('User', user, 'AllUsers');
var Allproducts = mongoose.model('Product', product, 'AllProducts');

how can i save multiple products while referring to multiple users? Later i want to populate products based on the users.

1 Answers

Your problem is in referencing the collection. In here when you compile your models

var AllUser = mongoose.model('User', user, 'AllUsers');
var Allproducts = mongoose.model('Product', product, 'AllProducts');

you use Product and for database collection you use AllProducts. That's the problem so...try doing it like this

 var Users = mongoose.model('Users', user, 'Users');
 var Products = mongoose.model('Products', product, 'Products');

Give it a proper naming convention.

Also there is s typo here in this code.. here I have fixed it

var product = new Schema(
    {
        sku: { type: String, required: true, unique: true },
        title: { type: String, required: true },
        category: { type: Array, default: [] },
        images: { type: Array, default: [] },
        groups: { type: Array, default: [] },
        price: { type: Number, default: null },
        unit: { type: String, default: null },
        quantity: { type: Number, default: null },
        description: { type: String, default: null}
    }
);

also in your user schema

var user = new Schema(
{
    uid: { type: String, index: true, unique: true },
    firstName: { type: String, required: true, default: null },
    lastName: { type: String, default: null, default: null },
    userEmail: { type: String, unique: true, required: true, lowercase: true, 
    },
    userProfileImg: { type: String, required: true, default: null },
    userDesignation: { type: String, default: null },
    userMobile: { type: Number, required: true, default: null },
    products: [{ type: Schema.Types.ObjectId, ref: 'Product' }]
  }
);

make products as an array type so that you can store multiple product ids

Related