복붙노트

[MONGODB] ) (MongoDB를의 collection.find에 콜백을 얻는 방법

MONGODB

) (MongoDB를의 collection.find에 콜백을 얻는 방법

내가 MongoDB를 / 노드 / Express에서 () collection.find 실행하면, 나는 그것이 완료 때 콜백을 좀하고 싶습니다. 이것에 대한 올바른 구문은 무엇입니까?

 function (id,callback) {

    var o_id = new BSON.ObjectID(id);

    db.open(function(err,db){
      db.collection('users',function(err,collection){
        collection.find({'_id':o_id},function(err,results){  //What's the correct callback synatax here?
          db.close();
          callback(results);
        }) //find
      }) //collection
    }); //open
  }

해결법

  1. ==============================

    1.즉, 올바른 콜백 구문하지만 손쉽게 찾을 콜백에 제공하는 것은 커서, 문서하지 배열입니다. 그래서 당신은 당신의 콜백이 문서의 배열로 결과를 제공을 돌려 커서에 toArray를 호출 할 경우 :

    즉, 올바른 콜백 구문하지만 손쉽게 찾을 콜백에 제공하는 것은 커서, 문서하지 배열입니다. 그래서 당신은 당신의 콜백이 문서의 배열로 결과를 제공을 돌려 커서에 toArray를 호출 할 경우 :

    collection.find({'_id':o_id}, function(err, cursor){
        cursor.toArray(callback);
        db.close();
    });
    

    함수의 콜백은 여전히 ​​호출자가 쿼리가 작동 여부 알 수 있도록 ERR 매개 변수를 제공해야합니다.

    2.x에서 드라이버 업데이트

    일반적인 사용을 단순화 할 수 있도록 지금, 오히려 콜백을 통해 제공보다 커서를 반환 찾을 수 :

    collection.find({'_id': o_id}).toArray(function(err, results) {...});
    

    또는 하나의 문서가 예상되고이 경우, 사용 findOne에 간단 :

    collection.findOne({'_id': o_id}, function(err, result) {...});
    
  2. ==============================

    2.JohnnyHK의 답변에 따라 단순히 db.open () 메소드 안에 내 전화를 포장하고 일했다. 감사합니다 @JohnnyHK.

    JohnnyHK의 답변에 따라 단순히 db.open () 메소드 안에 내 전화를 포장하고 일했다. 감사합니다 @JohnnyHK.

    app.get('/answers', function (req, res){
         db.open(function(err,db){ // <------everything wrapped inside this function
             db.collection('answer', function(err, collection) {
                 collection.find().toArray(function(err, items) {
                     console.log(items);
                     res.send(items);
                 });
             });
         });
    });
    

    그 예로서 도움이 될 것입니다 바랍니다.

  3. from https://stackoverflow.com/questions/11661545/how-to-get-a-callback-on-mongodb-collection-find by cc-by-sa and MIT license