gpt4 book ai didi

mongodb - 这两个 MongoDB 查询有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 10:02:43 26 4
gpt4 key购买 nike

目标

找出以下 MongoDB 查询中可能存在的差异,并理解其中一个有效而另一个无效的原因。

背景

不久前,我发布了一个问题,寻求有关 MongoDB 查询的帮助:

在那个问题中,我的查询不起作用,我正在寻找一种方法来修复它。我在评论中得到了大量帮助,并最终找到了解决方案,但似乎没有人能够解释为什么我的第一个不正确的查询不起作用,而第二个却起作用。

代码

第一个(不正确的)查询:

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 阶段做同样的事情,为什么我的代码会失败?它不应该完全没有区别吗(因为变化是幂等的?)

最佳答案

第一次查询,小组赛结束后,用户网名值保存在_id键下。不在 user.screen_name 键下,因此,该值不会是 projected因为没有 key 。

如果您修改投影,使用

{"$project": {"_id": "$_id", "count": 1, "tweet_texts": 1}},

{"$project": {"_id": 1, "count": 1, "tweet_texts": 1}},

{"$project": {"count": 1, "tweet_texts": 1}},

第一个管道将与第二个管道类似。

关于mongodb - 这两个 MongoDB 查询有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com