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