seanemmer / mongoose-seed

Seed data population for Mongoose
MIT License
52 stars 33 forks source link

Manually setting ObjectId ref doesn't seem to be working #25

Open robsilva opened 6 years ago

robsilva commented 6 years ago

For some reason, in my seed file, I cannot manually set an ObjectId reference to a different collection.

`var faker = require('faker'); var mongoose = require('mongoose'); var moment = require('moment'); var _ = require('lodash'); var Item = mongoose.model('Item'); var User = mongoose.model('User');

module.exports = function(done) {

var data = [];
var owners = [];

Item.remove({}, function(err) { 
   console.log('Item collection removed') 
});

User.find({type: 'owner'}, function(err, users){
    if(err) return next(err);
    owners = _.map(users, '_id');
});

_.times(_.random(50, 100), function(){

    var review = [],
        photos = [];

    _.times(_.random(1, 5), function(){
        review.push({
            posted_on       : faker.date.past(),
            title           : faker.lorem.sentence(),
            avatar          : `https://randomuser.me/api/portraits/${_.sample(["men","women"])}/${_.random(0, 99)}.jpg`,
            user            : faker.name.firstName(),
            stars           : _.random(0, 5),
            description     : faker.lorem.sentences(_.random(5, 20)), 
        });
    })

    _.times(_.random(1, 5), function(){
        photos.push({
            url         : `https://picsum.photos/1024/756?image=${_.random(0, 800)}`,
        });
    })

    var itemOwner = _.sample(owners);

    data.push({
        owner           : mongoose.Types.ObjectId(itemOwner), 
        product_name    : faker.commerce.productName(),
        category        : _.sample(["Ourdoor","Electronics","Musical Instruments","Fashion", "Sports", "Miscellaneous"]),
        condition       : _.sample(["Usable","Meh","Good","Great","Almost New"]),
        description     : faker.lorem.sentences(_.random(5, 20)),   
        price           : faker.commerce.price(),   
        reviews         : review,   
        photos          : photos,   
    });

});

done(null, data);

};`

My schema for reference: `var mongoose = require('mongoose'), Schema = mongoose.Schema;

var itemSchema = new Schema({ owner : { type: Schema.Types.ObjectId, ref: 'User' }, type : { type : String }, product_name : { type : String }, category : { type : String }, description : { type : String }, condition : { type : String }, price : { type : Number }, reviews : [{ posted_on : { type : Date}, title : { type : String}, avatar : { type : String}, user : { type : String}, stars : { type : Number}, description : {type: String} }], photos : [{ url: { type : String} }] }, { timestamps: { created: 'created_at', updated: 'updated_at' } });

mongoose.model('Item', itemSchema);`

When I look in my mondoDB, it looks right. It says, e.g: "owner" : ObjectId("5a8e361b4bd4307e29f98a4c"),

but when i try to populate, I am unable to do so.

am I missing something here?

Thanks,

Rob

seanemmer commented 6 years ago

Hi Rob,

It's a little hard for me to diagnose without fully replicating your env/code. Have you tried assigning 'mongoose.Types.ObjectId(itemOwner)' to a variable rather than doing so in data.push(), and if so does that variable return a defined value?

Best, Sean