2017-08-29 63 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:[]}}])