使用nodejs驱动程序1.4在mongodb中找不到_id

时间:2014-07-26 14:22:10

标签: node-mongodb-native

我有一个非常基本的应用程序,可以创建报告。我有一个应该从mongo数据库查询和拉取_id的一块。无论我无法通过_id找到工作。请注意,当我需要显示所有报告时,find()可以正常工作。我已经搜索了溢出并尝试了一些我见过的不同解决方案,但似乎没有工作......:

ObjectID(req.params.string)
new ObjectID(req.params.string)
BSON.ObjectID(req.params.id)
db.collection.serializer.ObjectID....etc

这是该片的当前代码,我正在使用最新版本的mongoDB和驱动程序(2.6和1.4),感谢任何帮助人员!: 来自reportRoutes.js的片段     var mongo = require(' mongodb');

var Server = mongo.Server,
    Db = mongo.Db,
    BSON = mongo.BSONPure;
    ObjectID = mongo.ObjectID;

  exports.findById = function(req, res) {
  var id = new ObjectID.createFromHexString(req.params.id);
  console.log('Retrieving report: ' + id);
  db.collection('reports', function(err, collection) {
  db.collection.findOne({ '_id': (id)}, function(err, item) {
      res.send(item);
      });
  });
};
来自Server.js的

片段

    app.get('reports/:id', reportRoutes.findById);

这是我转到

时的控制台输出
http://localhost:3000/reports/53d2c100132358560c000001:

未捕获的TypeError:无法读取属性' getCurrent'未定义的popup.js:17

这是当我转到

时的mongo文档
http://localhost:3000/reports/ <-just does a collection.find()

{
"_id": "53d2c100132358560c000001",
"name": "Whatheheck",
"author": "cornhole",
"date": "07232014",
"costs": "200",
"cash": "2070",
"avoidances": "9000",
"reuse": "3000",
"recycle": "20000",
"time": "",
"description": "",
"picture": null
}

这是使用db.reports.find()从mongoshell中提取的文档。漂亮()

{
    "_id" : ObjectId("53d2c100132358560c000001"),
    "name" : "Whatheheck",
    "author" : "cornhole",
    "date" : "07232014",
    "costs" : "200",
    "cash" : "2070",
    "avoidances" : "9000",
    "reuse" : "3000",
    "recycle" : "20000",
    "time" : "",
    "description" : "",
    "picture" : null
}

2 个答案:

答案 0 :(得分:0)

db.collection回调中,当您应该呼叫db.collection.findOne时,您正在呼叫collection.findOne。所以像这样:

exports.findById = function(req, res) {
    var id = ObjectID(req.params.id);
    db.collection('reports', function(err, collection) {
        collection.findOne({ '_id': id }, function(err, item) {
            res.send(item);
        });
    });
};

答案 1 :(得分:-1)

@JohhnyHK我仔细检查了一切并意识到这不是

app.get('reports/:id', reportRoutes.findById); 

应该是

app.get('/reports/:id', reportRoutes.findById); 

感谢指针!