如何MapReduce集合从包含数组的字段中获得所有值的连接数组



我在数据库中有以下模式:

{ 
    id: 12345; 
    friends: [123,345,678,908]
},
{ 
    id: 908; 
    friends: [123,345]
}

是否有办法从整个集合中获得所有唯一的朋友id的数组?

要获得不同的友元值,不需要编写map/reduce作业。

运行:

> db.collection.distinct("friends")
[ 123, 345, 678, 908 ]

我不太熟悉MongoDB的MapReduce实现,但我想您可以让映射器写出传递给它们的值作为键,并简单地使用空值。

这样你可以确保reducer只接收一次给定的键(你的好友id),你可以简单地把它写出来一次,而不需要迭代这些值。由于值无论如何都是空的,因此没有必要进行迭代(更不用说如果进行迭代,将多次写出键,您只需要编写一次以确保它是不同的)

但是,请记住,您的密钥将分散在reducer的输出文件中,例如,reducer 1可能输出123,而reducer 2可能输出345,因此您可能需要在之后合并输出文件的内容以构建您的数组。

相关内容

  • 没有找到相关文章

最新更新