2014-07-13 9 views
4

나는 빠른 둘러보기를 보았지만 답을 찾지 못했지만 기본적으로 express가 아닌 node.js와 mongodb를 사용하여 평소보다 webapi를 만들었습니다. 닷넷 MVC 웹 API 경로.mongodb nodejs toArray 각각 대

필자가 언급 한 한 가지 사실은 결과 집합을 반환하기 위해 내가 부피가 큰 방식으로 수행하고 있거나 적어도 그렇게 느끼는 방식입니다.

app.get('/property', function (req, res) { 
    var propArray = []; 
    MongoClient.connect(settings.connection, 
     function (err, db) { 
      if (err) throw err; 

      var properties = db.collection("PROPERTIES"); 

      var searchParams = { 
       Active: true, 
       Deleted: false 
      } 

      properties.count(searchParams, function (err, count) { 
       properties.find(searchParams).toArray(function (err, result) { 
        for (i = 0; i < count; i++) 
         propArray.push(new models.propertyModel(result[i])); 

        db.close(); 

        return res.json(propArray); 
       }); 
      }); 
     } 
    ); 
}); 

지금 나는 내가 .count 기능을 줄일 수로 사용하는 것을 선호하지만, 분명 당신이 한 번만 응답을 반환 할 수 .each 기능보다는 .toArray가 있다고 지적했습니다. 네가 너의 몽고 지식으로 나를 깨우칠 수 있는지 궁금해.

properties.find(searchParams).each(function (err, result) { 
    return res.json(result); 
}); 

그런 식으로 6 줄의 코드와 데이터베이스에 대한 추가 호출을 잘라냅니다.

+1

왜'대신'count'의 result.length'을 사용하여 바로 사용하지 않는? –

+0

Ahhh 감사합니다. 나는이 소감에 대해 잘 몰랐습니다. 정확히 내가 듣기를 바라는 종류의 것입니다. –

+0

정말 감사합니다. 대단히 감사합니다! –

답변

5

카운트()는 여전히 toArray()와 절단 할 수 있습니다

properties.find(searchParams).toArray(function (err, result) { 
    var i, count; 
    for (i = 0, count = result.length; i < count; i++) { 
     propArray.push(new models.propertyModel(result[i])); 
    } 
    db.close(); 
    return res.json(propArray); 
    }); 
+0

그게 꽤 많이 예를 들어 주셔서 감사합니다. –

+0

@Ben, properties.find (searchParams)의 'searchParams'가 json 객체의 Arrary 일 경우 어떻게해야합니까? 여러 값과 일치하는 레코드를 검색해야한다는 의미였습니까? – yadavr

+0

@yadavr, find()는 객체를 취하므로 배열을 searchParams로 전달할 수는 없습니다. 그러나 여러 값과 일치하는 레코드를 검색 할 수있는 쿼리 속성을 사용할 수 있습니다. 자세한 내용은 mongodb 문서를 참조하십시오. https://docs.mongodb.com/manual/reference/method/db.collection.find/ – Ben