2017-10-22 9 views
0

昨日以来私が解決しようとしてきた問題があります。そこでは、都市名またはサブシティ名を受け入れ、都市またはサブシティが一致するすべてのドキュメントのデータベースをクエリします。重複しない値を見つけて返す

私の問題は、次のとおりです。

1)3つの文書はムンバイとして街を持っている4書類がある場合は、1つの文書はナビムンバイなどの都市があり、私はムンバイのクエリを実行するときどこ1つの文書、私は唯一の2文書を取得する必要があります'都市はムンバイで、別の文書の都市はナビムンバイですが、そのように働くのではなく、4つの文書をすべて入手して、ムンバイの都市を持つ3つの文書と、ナビムンバイという都市を持つ1つの文書を得ます。私は、重複する結果を解消する方法を知りたいと思ったし、ちょうどキーの値に

を繰り返すことなく、重複キーとそれぞれのただ一つの文書ずに文書を返す現在、私のコードは次のようになります。あなたはこのために.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()は「group`ません:あなたは両方のフィールドで検索した後

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

関連する問題