Mongoose findById返回null

时间:2015-12-16 17:42:01

标签: node.js mongodb mongoose

所以我有这个架构:

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

var TreeSchema = new Schema({
}, { collection: 'treeLocations' });

var TreeDetailsSchema = new Schema({
}, { collection: 'treeInfo' });

module.exports = mongoose.model('Tree', TreeSchema);
module.exports = mongoose.model('TreeDetail', TreeDetailsSchema, "treeInfo");

我正在用ID这样打电话:

var TreeDetails = require('./app/models/tree').model('TreeDetail');
router.route('/api/trees/:tree_id')
    .get(function(req, res) {
        TreeDetails.findById(req.params.tree_id, function(err, treedetail) {
            if (err)
                res.send(err);
            res.json(treedetail);
        });
    });

出于某种原因 - http://localhost:3000/api/trees/5498517ab68ca1ede0612d0a这是一棵真树,正在返回null

可以帮助你帮助我的东西:

2 个答案:

答案 0 :(得分:0)

我没有看到的步骤是您实际连接到MongoDB的方式,之后,您如何从连接中获取模型。

//  connect to MongoDB
var db = mongoose.createConnection('mongodb://user:pass@host:port/database');

//  now obtain the model through db, which is the MongoDB connection
TreeDetails = db.model('TreeDetails');

最后一步是如何将模型与连接的mongo数据库关联。

有关Mongoose.model

的更多信息

有几种方法可以使用mongoose建立与MongoDB的连接,本教程使用: mongoose.connect('mongodb://node:node@novus.modulusmongo.net:27017/Iganiq8o');

(我个人更喜欢更明确的mongoose.createConnection,如示例所示)

(我在本例中使用了mongoose 4.3.1

我重现的步骤,以提供一个工作示例(不为其创建Web服务):

var mongoose = require('mongoose'),
    TreeDetails, db;

//  create the model schema
mongoose.model('TreeDetails', mongoose.Schema({
    //  ..  your field definitions
}, {collection: 'treeInfo'}));

db = mongoose.createConnection('mongodb://user:pass@host/example');
TreeDetails = db.model('TreeDetails');

TreeDetails.findById('5671ac9217fb1730bb69e8bd', function(error, document) {
    if (error) {
        throw new Error(error);
    }

    console.log(document);
});

答案 1 :(得分:0)

而不是:

var TreeDetails = require('./app/models/tree').model('TreeDetail');

尝试:

var mongoose = require('mongoose'),
    TreeDetails = mongoose.model('TreeDetail');

定义集合名称不应该给您带来任何问题。这就是在使用mongo shell时将在数据库中调用集合的内容。

为了确定,请在调用findById之前尝试记录 req.params.tree_id ,以确保它在您怀疑时通过。