2017-08-29 71 views
0

我有以下查詢:匹配蒙戈內合計不返回結果

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

這是爲了找到集合中重複。 但是,當我向匹配階段添加另一個條件時,查詢不會返回任何結果。

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',或者至少類似的東西。目前還不清楚你是否期望這個字段在「重複」中有相同的值,但你基本上需要使用一個累加器操作符來返回一個值因此它是可見的。 –

回答

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:[]}}])