Model.js
const mongoose=require('mongoose');
const validator=require('validator');
const RegisterationSchema=mongoose.Schema({
name:{
type:String,
required:true,
},
email:{
type:String,
required:true,
trim:true,
unique:true,
validate(value){
if(!validator.isEmail(value)){
throw new Error ("Please enter correct email");
}
}
},
password:{
type:String,
required:true,
validate(value){
if(value.length<6){
throw new Error ("Please enter password more than 6 character");
}
}
},
isAdmin:{
type:Boolean
}
})
const RegisterProductSchema=mongoose.Schema({
name:{
type:String,
required:true
},
price:{
type:Number,
required:true,
validate(value){
if(value<=0){
throw new Error('Price should be more than 0');
}
}
},
size:{
type:String,
required:true
},
stock:{
type:Number,
required:true
},
unit:{
type:String,
required:true
},
category:{
type:String,
required:true
},
brand:{
type:String,
required:true
},
images:{
type:Buffer,
required:true,
}
})
const RegisterProduct=mongoose.Schema({
a_id:{
type:String,
required:true
},
products:[RegisterProductSchema]
})
const Registeration=mongoose.model('registeration',RegisterationSchema);
const CreateProduct=mongoose.model('register products',RegisterProduct)
module.exports={
Registeration,
CreateProduct
}
What I am doing is if the a_id="12345" is there in DB then append object for eg
{
"name":"abc".
"price":10,
"size":"M",
"stock:200,
"unit":"pcs",
"category":"shirt",
"brand":"levis"
}
into products array in db like a person is adding all the products into his accounts
controller
exports.createProducts=async(req,res)=>{
const createProducts=new CreateProduct();
const name=req.body.name;
const price=req.body.price;
const size=req.body.size;
const stock=req.body.stock;
const unit=req.body.unit;
const category=req.body.category;
const brand=req.body.brand;
const images=req.file.buffer;
const obj={
name,
price,
size,
stock,
unit,
category,
brand,
images
}
const savedId=await CreateProduct.findOne({a_id:"12345"});
console.log(savedId.a_id);
if(savedId.a_id==="12345"){
console.log("in save product");
createProducts.products=createProducts.products.push(obj);
}
else{
createProducts.a_id="12345";
createProducts.products=createProducts.products.concat(obj);
}
try{
await createProducts.save();
res.status(201).send({message:"succesfully saved"});
}
catch(err){
console.log(err);
res.status(400).send("unsuccessfull");
}
}
error
Error: register products validation failed: products: Cast to embedded failed for value "1" (type number) at path "products" because of "ObjectParameterError", a_id: Path `a_id` is required.
at ValidationError.inspect (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\error\validation.js:48:26)
at formatValue (node:internal/util/inspect:782:19)
at inspect (node:internal/util/inspect:347:10)
at formatWithOptionsInternal (node:internal/util/inspect:2167:40)
at formatWithOptions (node:internal/util/inspect:2029:10)
at console.value (node:internal/console/constructor:324:14)
at console.log (node:internal/console/constructor:360:61)
at exports.createProducts (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\controllers\create products controller.js:42:17)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
errors: {
products: CastError: Cast to embedded failed for value "1" (type number) at path "products" because of "ObjectParameterError"
at DocumentArrayPath.cast (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schema\documentarray.js:511:19)
at DocumentArrayPath.cast (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schema\documentarray.js:426:17)
at DocumentArrayPath.SchemaType.applySetters (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1192:12)
at model.$set (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:1364:22)
at model.set [as products] (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\helpers\document\compile.js:182:19) at exports.createProducts (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\controllers\create products controller.js:31:32)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
stringValue: '"1"',
messageFormat: undefined,
kind: 'embedded',
value: 1,
path: 'products',
reason: ObjectParameterError: Parameter "obj" to Document() must be an object, got 1
at EmbeddedDocument.Document (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:113:11)
at EmbeddedDocument.Subdocument (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\types\subdocument.js:31:12)
at EmbeddedDocument.ArraySubdocument [as constructor] (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\types\ArraySubdocument.js:34:15)
at new EmbeddedDocument (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schema\documentarray.js:134:17)
at DocumentArrayPath.cast (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schema\documentarray.js:505:22)
at DocumentArrayPath.cast (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schema\documentarray.js:426:17)
at DocumentArrayPath.SchemaType.applySetters (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1192:12)
at model.$set (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:1364:22)
at model.set [as products] (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\helpers\document\compile.js:182:19)
at exports.createProducts (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\controllers\create products controller.js:31:32),
valueType: 'number'
},
a_id: ValidatorError: Path `a_id` is required.
at validate (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
at SchemaString.SchemaType.doValidate (C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
at C:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
at processTicksAndRejections (node:internal/process/task_queues:78:11) {
properties: [Object],
kind: 'required',
path: 'a_id',
value: undefined,
reason: undefined,
[Symbol(mongoose:validatorError)]: true
}
},
_message: 'register products validation failed'
}