findOne NodeJS MongoDB驱动程序

时间:2013-10-28 01:18:13

标签: node.js mongodb

我有一个名为'English'的集合中的JSON数据,我正在使用MongoDB驱动程序设置一个带有nodejs app的REST api。如果我执行以下操作,则会获得浏览器中返回的所有JSON数据。

app.get('/sentences', function (req, res){

     db.collection('english', function(err, collection) {
        collection.find().toArray(function(err, items) {

            res.send(items);
        });
    });

})

然而,当我尝试去/sentences/1获取一条记录时,应用程序正在冻结(浏览器标签中的半月形变慢)并且没有记录错误。我怎么做这个findOne有什么问题吗?

app.get('/sentences/:id', function(req,rest){

     var query = { 'question' : req.params.id };
     console.log(query);
     console.log('query');

    db.collection('english', function(err, collection) {

        collection.findOne(query, function(err, item) {
            console.log(err);
            res.send(item);
        });
    });
});

JSON数据

[
  {
    "_id": "526c0e21977a67d6966dc763",
    "question": "1",
    "uk": "blah blah blah",
    "us": "blah blah balh"
  },
  {
    "_id": "526c0e21977a67d6966dc764",
    "question": "2",
    "uk": "Tom went outside for a fag. I think he smokes too much!",
    "us": "Tom went outside for a cigarette. I think he smokes too much!"
  },
  {
    "_id": "526c0e21977a67d6966dc765",
    "question": "3",
    "uk": "Do you fancy going to the cinema on Friday?",
    "us": "How about going to the movies on Friday"
  }
]

更新

正在发生的事情是应用程序最终超时,我在浏览器中收到No data received消息。

3 个答案:

答案 0 :(得分:8)

nodejs mongodb findOne by id

现在已经晚了,但其他人也会有所帮助。

var id = new require('mongodb').ObjectID('58fcf02b1ab5de07e2a1aecb');//req.params.id
db.collection('users').findOne({'_id':id})
 .then(function(doc) {
        if(!doc)
            throw new Error('No record found.');
      console.log(doc);//else case
  });

答案 1 :(得分:3)

问题是其中一个参数中的拼写错误('res'中的额外't')。而不是

app.get('/sentences/:id', function(req,rest){
...

res.send(item);

应该是

app.get('/sentences/:id', function(req,res){ 
...

res.send(item);

答案 2 :(得分:1)

这不好,但仍会对其他人有所帮助。

var id = new require('mongodb').ObjectID('58fcf02b1ab5de07e2a1aecb');//req.params.id
db.collection('users').findOne({'_id':id})
 .then(function(doc) {
        if(!doc)
            throw new Error('No record found.');
      console.log(doc);//else case
  });