findone NodeJS Driver MongoDB

Eu tenho dados do JSON como você vê abaixo em uma coleção chamada 'English', para a qual estou montando uma api de descanso com uma aplicação nodejs usando o driver MongoDB. Se eu fizer o seguinte, eu recebo todos os dados JSON retornados no navegador.

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

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

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

})

No entanto, quando tento ir a {[[3]} para obter um registo, a aplicação está a congelar (a meia-lua na página do navegador gira lentamente) e não há erros registados. Há algo de errado com a forma como estou a fazer isto? encontraste?

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);
        });
    });
});

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

actualizar

O que está a acontecer é que a app acaba por ser cronometrada e eu recebo uma mensagem no navegador.

Author: Leahcim, 2013-10-28

3 answers

Nodejs mongodb findOne by id É tarde, mas será útil aos outros.
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
  });
 14
Author: Muhammad Shahzad, 2020-06-20 09:12:55

O problema era uma gralha num dos argumentos (um extra 't' em 'res'). Em vez de

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

res.send(item);

Devia ter sido

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

res.send(item);
 4
Author: Leahcim, 2013-10-28 15:14:54
Não é bom, mas será útil aos outros.
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
  });
 2
Author: Mohamed Ali, 2018-06-11 10:33:44