Mongoose findOne callback gives me null

六月ゝ 毕业季﹏ 提交于 2020-01-14 04:21:14

问题


In the code below obj receives null in the findOne callback. Don't understand why. In my database it looks like this.

MongoDB shell version: 2.2.0
connecting to: test
> use test
switched to db test
> db.Restaurant.findOne();
{
    "_id" : ObjectId("53372f9714b4d69cbfa2bbaf"),
    "name" : "Printz",
    "visit" : "2014-04-02 19:00:00"
}

Code app.js

/**
 * Module dependencies.
 */

var express = require('express');
var http = require('http');
var path = require('path');
var moment = require('moment');

var mongoose = require('mongoose');

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

var connection = mongoose.connection;

connection.on('error', console.error);

connection.once('open', function() {
    console.log("open!");
});

console.log("Open database")

mongoose.connect('mongodb://localhost/test');

var eventSchema = new mongoose.Schema({
    name: String,
    visit: Date
});

var Restaurant = mongoose.model('Restaurant', eventSchema);

app.get('/', function(req, res) {
    Restaurant.findOne({}, function(err, obj) {
        if (err || !obj) {
            res.send(500);
            console.log("error: " + err + ", obj: " + obj);
            return;
        }

        console.log("obj: " + obj);

        res.render('index', {
            name: obj.name
        });
    });
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

回答1:


Yet another victim of mongoose auto-pluralization of collection names. Mongoose is querying the collection 'Restaurants' instead of 'Restaurant'.

var eventSchema = new mongoose.Schema({
  name: String,
  visit: Date
}, {collection: 'Restaurant'}); //override default collection name

var Restaurant = mongoose.model('Restaurant', eventSchema);

For details see the docs on mongoose.Model and util.toCollectionName.



来源:https://stackoverflow.com/questions/22828053/mongoose-findone-callback-gives-me-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!