여러 Mongodb 콜렉션에서 데이터를 검색하고 나열해야하는 페이지를 작성 중입니다. 익스프레스 라우터 기능에서 별도의 쿼리를 수행 한 다음 각 섹션의 관련 데이터에 액세스하는 페이지로 전달되는 배열로 결과를 무시합니다. 지금까지 최대 세 개의 쿼리로는 정상적으로 작동했지만 네 번째 쿼리를 추가하면 오류가 발생합니다.Mongo/Express/Node에서 다중 콜렉션을 검색 할 때 오류가 발생했습니다.
라우터 기능은 다음과 같다 :
(더미 컬렉션 이름을 사용)router.get('/thetest',function(req,res){
var finalResult = {};
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/myapp';
MongoClient.connect(url, function(err, db){
if(err){
console.log("Connection Error",err);
}else{
var collection = db.collection('cats');
collection.find({}).toArray(function(err,result){
if(err){
console.log("Error retrieving cats");
}else if (result.length){
finalResult.ctlist = result;
console.log("cats OK");
}
});
var collection = db.collection('mice');
collection.find({}).toArray(function(err,result){
if(err){
console.log("Error retrieving mice");
}else if (result.length){
finalResult.mclist = result;
console.log("mices OK");
}
});
var collection = db.collection('cheese');
collection.find({}).toArray(function(err,result){
if(err){
console.log("Error retrieving cheese");
}else if (result.length){
finalResult.chlist = result;
console.log("Cheese OK");
}else{
console.log('No Documents');
}
});
var collection = db.collection('mice');
collection.find({}).sort({tailLength:1}).limit(3).toArray(function(err,result){
if(err){
console.log("Error retrieving alert bookings");
}else if (result.length){
finalResult.mtlist = result;
console.log("Mouse tail length ok");
res.render('thetest',{
"thelist":finalResult
});
}
db.close();
});
}
});
});
따라서 세 개의 다른 그룹으로 이루어진 네 개의 질의가있다. 결과는 각 루프를 사용하여 Jade 템플릿에 나열됩니다.
네 개의 쿼리 중 하나를 주석 처리하고 다른 세 개의 쿼리를 실행하면 잘 작동합니다. 결과가 페이지에 나열됩니다. 4 개의 쿼리를 모두 주석 처리하고 실행하면 노드가 중단되고 페이지에 아무 것도 표시되지 않습니다. 컬렉션 중 어느 것도 크기가 약 6 개가 넘지 않으며 각각에 몇 개의 필드가 있습니다.
나는이 모든 것을 처음 접했고, 이것이 내가 시도하고있는 일을하는 가장 좋은 방법이 아닐 수도 있다는 것을 이해한다.
누구든지 내가 잘못 가고있는 곳을 설명 할 수 있습니까? 그리고/또는 b) 더 나은 접근 방식을 제안 할 수 있습니까?
감사
나는 내 코드에 대해 당신이 맞다고 생각한다. 나는 최근에 mongodb로 node.js를 배우려고 시작했으며 많은 시행 착오를 반복하고있다. 어디에서 render 함수와 db.close 함수를 넣을까요? 아니면 이걸할까요? 그런 새내기가되어서 미안 해요 – Drum
모든 작업을 끝낸 후에 render 함수를 넣으십시오. 즉, 콜백 함수입니다. –
아직이 부분을 아직 완전히 이해하지 못했지만 올바른 방향으로 나를 놓았 기 때문에 다시 들어가서 시도하고 배우게됩니다. 감사합니다. – Drum