【发布时间】:2017-04-19 15:06:21
【问题描述】:
目标
找出以下 MongoDB 查询中可能存在的差异,并了解其中一个有效而另一个无效的原因。
背景
不久前,我发布了一个问题,寻求有关 MongoDB 查询的帮助:
在那个问题中,我的查询不起作用,我正在寻找解决方法。我在 cmets 中得到了很多帮助,最终找到了解决方案,但似乎没有人能够解释为什么我的第一个错误查询不起作用,而第二个却可以。
代码
第一个(不正确的)查询:
pipeline = [
{"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}},
{"$project": {"_id": "$user.screen_name", "count": 1, "tweet_texts": 1}},
{"$sort" : {"count" : -1}},
{"$limit": 5}
]
第二次查询:
pipeline = [
{"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}},
{"$sort" : {"count" : -1}},
{"$limit": 5}
]
现在,有意识的眼睛会看到两个查询之间的区别是项目阶段{"$project": {"_id": "$user.screen_name", "count": 1, "tweet_texts": 1}}。
当时我认为这个阶段是必要的,但是由于我已经在$group阶段选择了我需要的字段,所以我真的不需要它。事实上,这个额外且不必要的阶段导致测试失败。
问题
如果第一个示例中的$project 阶段没有用,并且与$group 阶段做同样的事情,为什么我的代码会失败?不应该根本没有区别吗(因为变化是幂等的?)
【问题讨论】:
-
我没有收到任何通知,因为提到 @chidram 而不是
chridam有错字。我一有空闲时间就会尝试回答这个问题。
标签: mongodb mongodb-query pymongo