mongoose在查询mongolab数据库时返回空数组/

swa*_*oji 0 mongoose mongodb node.js express mlab

我是mongodb和mongoose的新手,我正在努力学习它.我在mongolab上有一个名为"firstdatabase"的现有数据库,它有一个名为"parking_info"的集合,这是该集合中的一条记录:

{
    "_id": {
        "$oid": "559c152fa439a961c357f931"
    },
    "POST_ID": "354-20160",
    "MS_ID": "-",
    "MS_SPACEID": 0,
    "CAP_COLOR": "Grey",
    "METER_TYPE": "SS",
    "SMART_METE": "Y",
    "ACTIVESENS": "N",
    "JURISDICTI": "SFMTA",
    "ON_OFF_STR": "ON",
    "OSP_ID": 0,
    "STREET_NUM": 2016,
    "STREETNAME": "CHESTNUT ST",
    "STREET_SEG": 3977000,
    "RATEAREA": "Area 5",
    "SFPARKAREA": "Marina",
    "LOCATION": {
        "type": "Point",
        "coordinates": [
            37.8007983983,
            -122.4368696024
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用mongoose在nodejs应用程序中使用此数据库.这是我的目录结构:

>models
-->parking.js
>views
-->parkings.handlebars
>credentials.ja
>app.js
Run Code Online (Sandbox Code Playgroud)

在parking.js - >我正在创建架构.

// mongoose scehma
var mongoose = require('mongoose');
var parkingSchema = mongoose.Schema({
    "POST_ID": String,
    "MS_ID": String,
    "MS_SPACEID": Number,
    "CAP_COLOR": String,
    "METER_TYPE": String,
    "SMART_METE": String,
    "ACTIVESENS": String,
    "JURISDICTI": String,
    "ON_OFF_STR": String,
    "OSP_ID": Number,
    "STREET_NUM": Number,
    "STREETNAME": String,
    "STREET_SEG": Number,
    "RATEAREA": String,
    "SFPARKAREA": String,
    "LOCATION": {
        "type": String,
        "coordinates": [Number]
    }
});

var Parking = mongoose.model('parking_info', parkingSchema);
module.exports = Parking;
Run Code Online (Sandbox Code Playgroud)

在我的app.js中,我有:

var mongoose = require('mongoose');
var Parking = require('./models/parking');

var opts = {
    server: {
        socketOptions: { keepAlive: 1 }
    }
};
switch(app.get('env')){
    case 'development':
        mongoose.connect(credentials.mongo.development.connectionString, opts);
        console.log('connected..to db');
        break;
    case 'production':
        mongoose.connect(credentials.mongo.production.connectionString, opts);
        break;
    default:
        throw new Error('Unknown execution environment: ' + app.get('env'));
}


app.get("/parkings", function(req, res){
    Parking.find(function(err, parkings){
        if(err){
            console.log('error..');
            return handleError(err);
        }
        else {
            console.log('returning parkings..');
            res.render( "parkings", parkings);
        }

    });

});
Run Code Online (Sandbox Code Playgroud)

我试图在parkings.handlebars中显示数据

<h1>Parkings</h1>
{{#each parkings}}
    <div class="parking">
        <h3>{{STREETNAME}}</h3>

    </div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

但是我的Parking.find返回一个空数组,有人可以帮我理解我错在哪里.我正在阅读Ethan Brown的"使用Node和Express进行Web开发"一书

小智 8

解决问题的另一种方法是在模型中明确定义集合名称,即var Parking = mongoose.model('parking_info', parkingSchema, 'parking_info');.如果未指定集合名称,则使用Mongoose约定.

请参阅:http://mongoosejs.com/docs/api.html#index_Mongoose-model

参数:

  • 名称型号名称
  • [模式]
  • [collection] name(可选,从型号名称引出)
  • [skipInit]是否跳过初始化(默认为false)

"当没有传递集合参数时,Mongoose通过将模型名称传递给utils.toCollectionName方法来生成集合名称.此方法使名称复数化.如果您不喜欢此行为,请传递集合名称或设置模式集合名称选项."