我在数据库中有以下模式:
{
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
,因此您可能需要在之后合并输出文件的内容以构建您的数组。