2

I'm trying to populate albums with images using userid sent through params but i end up with an empty array even though there is data in database.

"use strict"
var express = require('express');

var app = express();
var mongoose = require('mongoose');
var Schema = mongoose.Schema

console.log('Welcome');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);

mongoose.connect('mongodb://localhost/Datab');
var db = mongoose.connection;

db.once('open', function () {
    console.log('Connected to Database');

});

//Schema for the data 

var userSchema = new mongoose.Schema({
    name: String
});
var albumSchema = new mongoose.Schema({
    userid: String,
    albumName: String,
    albumDesc: String,
    albumThumbnail: String,
    imageCount: Number,
    images: [{
        type: Schema.Types.ObjectId,
        ref: 'Image'
    }]
});

var ImageSchema = new Schema({
    album_id: {
        type: String,
        ref: 'Album'
    },
    imageName: String,
    imageDescription: String,
    imageURL: String,
    likeCount: Number,
    commentCount: Number
})


var Userdata = mongoose.model('Userdata', userSchema);
var Album = mongoose.model('Album', albumSchema);
var Image = mongoose.model('Image', ImageSchema);

//display of albums
app.get('/user/:user_id/photos', function (req, res) {
    var user_id = req.params.user_id
    Album.find({
        userid: user_id
    })
        .populate('images')
        .exec(function (err, albums) {
            if (!err) {
                return res.send({
                    status: {
                        error: 0,
                        message: "Successful"
                    },
                    data: {
                        albums: albums
                    }
                })
            } else
                res.send('Unsuccessful');
        })


});


app.listen(3000);

output:

{

    "status": {

        "error": 0,

        "message": "Successful"

    },

    "data": {

        "albums": []

    }

}

why do i get an empty array as output?

Find in the mongo shell returns the following result

db.Album.find() {
    "_id": ObjectId("529eed506c7b0a09b2204203"),
    "albumDesc": "outings",
    "albumName": "Photoclics1",
    "albumThumbnail": "http: //192.168.71.250/uploads/cat1_thumb.jpg",
    "imageCount": "1",
    "images": ["529ef0016c7b0a09b2204205", "529ef0266c7b0a09b2204206"],
    "userid": "529eec5a6c7b0a09b22041ff"
}

EDIT 2: This is the output that i expect to get

{
"error": {
"status": 0,
"message": "Successful"
},
"data": {
"albums": [
{
"albumName": "myclicks",
"albumID": "527102fdaed86d8807000001",
"albumDescription": "PhotosIclicked",
"albumThumbnailURL": "http: //192.168.71.250/uploads/image.jpg",
"imageCount": 2,
"images": [
{
"imageID": "527102fdaed86d8807000001",
"imageName": "mycat",
"imageDescription": "billy",
"imageURL": "http: //192.168.71.250/uploads/cat.jpg",
"imageThumbnailURL": "http: //192.168.71.250/uploads/cat_thumb.jpg",
"likeCount": 21,
"commentCount": 1
},
{
"imageID": "527102fdaed86d8807000001",
"imageName": "mycat",
"imageDescription": "billy",
"imageURL": "http: //192.168.71.250/uploads/cat1.jpg",
"imageThumbnailURL": "http: //192.168.71.250/uploads/cat1_thumb.jpg",
"likeCount": 21,
"commentCount": 1
}
]
}
]
}   
8
  • If you run simple find in the mongo shell on albums what data do you get? Commented Dec 5, 2013 at 10:31
  • The code is not readable. I'm sure you can format it better! Commented Dec 5, 2013 at 11:27
  • @hgoebl Formatted the code Commented Dec 5, 2013 at 11:41
  • Thanks, I can read it, but I don't know an answer, sorry. Looks good IMO. Commented Dec 5, 2013 at 12:59
  • Did you check if you parsed user_id correctly? Commented Dec 5, 2013 at 13:30

1 Answer 1

3

The identifier stored in the images array is shown as a String in the console. Yet, the definition in the schema for the images field is shown as the type ObjectId. If you either fix the data to be an ObjectId or change the data type, the issue should be resolved.

You could fix the data in the MongoDB console by iterating through the collection and the array and converting each element to an ObjectId.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.