node.js - Cast Error for Mongoose Populate Method -


i have 2 collections one, descriptions, parent, images, child , makes reference descriptions collection. based on hierarchy collections setup so.

descriptions: (example document)

{     "_id": "navy-blue",     "body": "lorem ipsum dolor sit amet, consectetur adipiscing elit. ut consequat nunc sit amet massa congue pharetra. aliquam pretium arcu nec velit accumsan, nec pellentesque mauris porttitor. donec ultrices interdum mi, in viverra nulla posuere sit amet. donec quis elit nibh. cras condimentum aliquam ullamcorper. in blandit, turpis aliquam laoreet, sapien nunc venenatis nisl, vel blandit massa massa non lacus. cras tempor enim non consequat iaculis. curabitur quis urna tellus. nunc @ mattis justo. donec dolor velit, placerat ut co" }  

images: (reference descriptions_id, example document)

{     "_id": {         "$oid": "55f0e2977f057f0d2f2ce548"     },     "pattern": "solid",     "propercasepattern": "solid",     "color": "navy-blue",     "propercasecolor": "navy blue",     "imageurl": "example.com/navy.jpg",     "imagesource": "http://test.com/",     "descriptions_id": "navy-blue" } 

as result of setup, trying setup route color , pattern selected , display of images documents match, while displaying description attached. description on needs color , not pattern.

here route: (error comes doc.descriptions_id console log)

router.get('/:pattern/:color/result', function(req, res){      console.log(req.params.color);      images.find( { pattern: req.params.pattern, color: req.params.color }).populate('descriptions_id').exec(function(err, image, doc){         if (err) { console.log(err); }         //console.log(image);         console.log(doc.descriptions_id);         res.render('pages/suit-result.hbs', {             pattern : req.params.pattern,             color : req.params.color,             image : image         });     }); }); 

here error message current setup:

[casterror: cast objectid failed value "navy-blue" @ path "_id"]   stack: 'error\n    @ mongooseerror.casterror  message: 'cast objectid failed value "navy-blue" @ path "_id"',   name: 'casterror',   kind: 'objectid',   value: 'navy-blue',   path: '_id' } 

why failing @ value, when in mongoose documents shows you should use id naming convention reference point?

update

descriptions model:

var mongoose = require('mongoose'); var schema = mongoose.schema;  var descriptionschema = new schema({     color: string,     body: string, });  var description = mongoose.model('description', descriptionschema);  module.exports = description; 

images model:

var mongoose = require('mongoose'); var schema = mongoose.schema;  var imageschema = new schema({     pattern: string,     color: { type: string,  ref: 'description'},     imagename: string,     imageurl: string,     imagesource: string });  var images = mongoose.model('images', imageschema);  module.exports = images; 

it seem schema defintions not correct, or @ least have not overriden default handling _id. appear calling wrong path .populate() intended value should "color".

here sample:

var async = require('async'),     mongoose = require('mongoose'),     schema = mongoose.schema;  mongoose.connect('mongodb://localhost/test');  var data = {   "_id": "navy-blue",   "body": "lorem ipsum dolor sit amet, consectetur adipiscing elit. ut consequat nunc sit amet massa congue pharetra. aliquam pretium arcu nec velit accumsan, nec pellentesque mauris porttitor. donec ultrices interdum mi, in viverra nulla posuere sit amet. donec quis elit nibh. cras condimentum aliquam ullamcorper. in blandit, turpis aliquam laoreet, sapien nunc venenatis nisl, vel blandit massa massa non lacus. cras tempor enim non consequat iaculis. curabitur quis urna tellus. nunc @ mattis justo. donec dolor velit, placerat ut co" };   var descriptionschema = new schema({   _id: string,   body: string },{ _id: false });  var imageschema = new schema({   color: { type: string, ref: 'description' },   propercasecolor: string });  var description = mongoose.model('description',descriptionschema),     image = mongoose.model('image',imageschema);   async.series(   [     function(callback) {       async.each([description,image],function(model,callback) {         model.remove({},callback);       },callback);     },      function(callback) {       async.waterfall(         [           function(callback) {             description.create(data,callback);           },           function(desc,callback) {             image.create({               "color": desc,               "propercasecolor": "navy blue"             },function(err) {               callback(err);             });           }         ],         callback       );     },     function(callback) {       image.find().populate('color').exec(function(err,doc) {         console.log(doc);         callback(err);       });     }   ],   function(err) {     if (err) throw err;     mongoose.disconnect();   } ); 

which returns populated object:

[ { _id: 56060d1812966d29622f8a04,     color:      { _id: 'navy-blue',        body: 'lorem ipsum dolor sit amet, consectetur adipiscing elit. ut consequat nunc sit amet massa congue pharetra. aliquam pretium arcu nec velit accumsan, nec pellentesque mauris porttitor. donec ultrices interdum mi, in viverra nulla posuere sit amet. donec quis elit nibh. cras condimentum aliquam ullamcorper. in blandit, turpis aliquam laoreet, sapien nunc venenatis nisl, vel blandit massa massa non lacus. cras tempor enim non consequat iaculis. curabitur quis urna tellus. nunc @ mattis justo. donec dolor velit, placerat ut co',        __v: 0 },     propercasecolor: 'navy blue',     __v: 0 } ] 

and of course without .populate() value stored in "color" within images collection:

[ { _id: 56060d5f81fff8356262d711,     color: 'navy-blue',     propercasecolor: 'navy blue',     __v: 0 } ] 

so make sure schema defined "ref" model , of course in linked model _id both set correct type , of course configuration disables objectid creation , casting via { _id: false }.


Comments