gpt4 book ai didi

跨 2 个集合的 Mongodb map 减少

转载 作者:可可西里 更新时间:2023-11-01 10:44:47 24 4
gpt4 key购买 nike

假设我们有用户和帖子集合。在post collection中,vote将用户名存储为key。

db.user.insert({name:'a', age:12});
db.user.insert({name:'b', age:12});
db.user.insert({name:'c', age:22});
db.user.insert({name:'d', age:22});

db.post.insert({Title:'Title1', vote:[a]});
db.post.insert({Title:'Title2', vote:[a,b]});
db.post.insert({Title:'Title3', vote:[a,b,c]});
db.post.insert({Title:'Title4', vote:[a,b,c,d]});

我们想按post.Title分组,找出不同用户年龄段的投票数。

> {_id:'Title1', value:{ ages:[{age:12, Count:1},{age:22, Count:0}]} }
> {_id:'Title2', value:{ ages:[{age:12, Count:2},{age:22, Count:0}]} }
> {_id:'Title3', value:{ ages:[{age:12, Count:2},{age:22, Count:1}]} }
> {_id:'Title4', value:{ ages:[{age:12, Count:2},{age:22, Count:2}]} }

我已经搜索过,但没有找到一种方法来访问 mongodb mapreduce 中的 2 个集合。能否实现re-reduce?

我知道在 post 中嵌入用户文档非常简单,但这不是一个好方法,因为真实的用户文档有很多属性。如果包含简化版的用户文档,会限制分析的维度。

{Title:'Title1', vote:[{name:'a', age:12}]}

最佳答案

MongoDB 没有多集合 Map/Reduce。 MongoDB 没有任何 JOIN 语法,可能不太适合临时连接。您需要以某种方式对这些数据进行非规范化。

您有几个选择:

选项 #1:在投票中嵌入年龄。

{Title:'Title1', vote:[{name:'a', age:12}]}

选项#2:保留年龄计数器

{Title:'Title1', vote:[a, b], age: { "12" : 1, "22" : 1 }}

选项 #3:进行“手动”加入

您最后的选择是编写脚本/代码,对两个集合执行 for 循环并正确合并数据。

因此您将遍历 post 并输出一个包含标题和投票列表的集合。然后,您将遍历新集合并通过查找每个 user 来更新年龄。

我的建议

选择#1 或#2。

关于跨 2 个集合的 Mongodb map 减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7964160/

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