【问题标题】:Mongoose findOne callback gives me nullMongoose findOne 回调给了我 null
【发布时间】:2014-04-03 12:55:58
【问题描述】:

在下面的代码中,obj 在 findOne 回调中接收到 null。不明白为什么。在我的数据库中,它看起来像这样。

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

代码 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'));
});

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    又一个 mongoose 自动复数集合名称的受害者。 Mongoose 正在查询集合“Restaurant”而不是“Restaurant”。

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

    详情见the docs on mongoose.Model and util.toCollectionName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 2016-02-10
      • 1970-01-01
      • 2019-09-11
      • 2016-01-29
      • 2021-12-04
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多