2017-10-22 13 views
0

어제부터 내가 해결하려고 시도한 문제가 있습니다. 도시/보조 도시 이름을 허용하는 API를 작성한 다음 도시 또는 보조 도시가 일치하는 모든 문서에 대해 데이터베이스를 쿼리합니다.중복되지 않은 값을 찾아서 반환합니다.

내 문제 : 3 개 문서 뭄바이로 도시가 4 개 문서가

1) 경우, 한 문서는 나비 뭄바이 등의 도시를 가지고 있는데 뭄바이에 대해 쿼리 할 때, 나는 가야 단지 2 문서 어디 한 문서 '도시는 뭄바이이고 또 다른 도시는 Navi Mumbai입니다. 대신에 뭄바이로 도시를 가지고있는 3 개의 문서와 Navi Mumbai로 도시를 보유한 1 개의 문서를 얻는 대신 4 개의 모든 문서를 얻을 수 있습니다. 당신은이에 대한 .aggregate()을 원하는

exports.get_startup_based_on_locaton = function(req, res) { 
    SSchema.find({ $or:[{'city': { $regex : new RegExp(req.params.location, "i")}}, {'subcity': { $regex : new RegExp(req.params.location, "i")}}]}, function(err, sschema) { 
    if (err) 
    res.send(err); 
    res.json(sschema); 
    }) 
} 

답변

1

: 나는 중복 결과를 제거 할 수있는 방법을 알고 그냥 키 값

가 현재 내 코드는 다음과 같습니다 반복하지 않고 중복 키가없는 문서 및 각 단지 하나 개의 문서를 반환하고 싶어 . 그것은 "그룹"그 유일한, 그리고 .find()은 '그룹'하지 않는 : 당신이 두 필드에서 검색 후

exports.get_startup_based_on_locaton = function(req, res) { 
    SSchema.aggregate([ 
     { $match: { 
     $or:[ 
      {'city': { $regex : new RegExp(req.params.location, "i")}}, 
      {'subcity': { $regex : new RegExp(req.params.location, "i")}} 
     ] 
     }}, 
     { $project: { combined: ['$city','$subcity'] } }, 
     { $unwind: '$combined' }, 
     { $match: { combined: { $regex : new RegExp(req.params.location, "i")} } }, 
     { $group: { _id: '$combined' } } 
    ], function(err, sschema) { 
     if (err) 
     res.send(err); 
     res.json(sschema); 
    }) 
} 

, 당신은 일치하는 문서에서 $project과 함께 그들을 데리고. 그런 다음 $unwind 배열을 만들고 일치하는 항목 만 필터링하십시오.

마지막으로 $group은 "고유 한"일치 항목을 방출합니다.

+0

고맙습니다. @Neil, 이것이 제가 찾고있는 것입니다. 모든 노력에 다시 한번 감사드립니다. – rohitpaniker

관련 문제