【问题标题】:MongoDB returning empty arrayMongoDB返回空数组
【发布时间】:2013-12-06 18:19:55
【问题描述】:

我正在尝试使用通过参数发送的用户 ID 使用图像填充相册,但即使数据库中有数据,我最终也会得到一个空数组。

"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);

输出:

{

    "status": {

        "error": 0,

        "message": "Successful"

    },

    "data": {

        "albums": []

    }

}

为什么我得到一个空数组作为输出?

在 mongo shell 中查找返回如下结果

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"
}

编辑 2:这是我期望得到的输出

{
"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
}
]
}
]
}   

【问题讨论】:

  • 如果您在 mongo shell 中对相册运行简单查找,您会得到什么数据?
  • @AlistairNelson 编辑了问题
  • 代码不可读。我相信你可以更好地格式化它!
  • @hgoebl 格式化代码
  • 谢谢,我能看懂,但我不知道答案,抱歉。看起来不错的海事组织。

标签: node.js mongodb mongoose


【解决方案1】:

images 数组中存储的标识符在控制台中显示为字符串。然而,架构中images 字段的定义显示为ObjectId 类型。如果您将数据修复为ObjectId 或更改数据类型,则问题应该得到解决。

您可以通过遍历集合和数组并将每个元素转换为 ObjectId 来修复 MongoDB 控制台中的数据。

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 2018-08-27
    • 2019-04-15
    • 2017-09-12
    • 2016-03-24
    • 2015-07-10
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多