2017-08-29 6 views
0

私は次のクエリを持ってを返しません。 しかし、マッチステージに別の条件を追加すると、クエリは結果を返しません。マッチング結果

db.company_name_match.aggregate([{"$group": {"_id": {"link": "$link", "company_name": "$company_name", "city": "$city"}, res: {$sum: 1}}}, {$match: {res: {$gt: 1}, match_count: 0}}]) 

ここで何か問題がありますか?そして、私はmatch_count == 0のドキュメントがあることが肯定的です。

+0

もちろん、「match_count」というフィールドは返されていないためです。 'パイプライン'とは、ステージの**入力**のみが前のステージの**出力**です。あなたの '$ group'はこのフィールドを出さないので、条件を一致させることはできません。 –

+0

I $ match_count?$ match_count? – elena

+1

これは、累積フィールドの出力に 'match_count:{$ first:" $ match_count "}'を追加する必要があることを意味します。 '$ group'や少なくともそれと同じようなものですが、このフィールドが" duplicates "に同じ値を持つことを期待しているかどうかは不明ですが、基本的に値を返すためにアキュムレータ演算子の1つを使う必要があります –

答えて

0

@Neil Lunnが示唆しているように、フィールドをグループ集約パイプラインステージに追加することでこれを修正しました。 これで、次のクエリが得られました。

db.company_name_match.aggregate([{"$group": {"_id": {"link": "$link", "company_name": "$company_name", "city": "$city"}, match_results: {$first: "$match_results"}, res: {$sum: 1}}},{$match: {res: {$gt: 1}, match_results:[]}}])