0

我在数据库中有以下架构:

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

有没有办法从整个集合中获取所有唯一朋友 ID 的数组?

4

2 回答 2

1

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

赶紧跑:

> db.collection.distinct("friends")
[ 123, 345, 678, 908 ]
于 2013-04-26T15:13:58.233 回答
0

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

这样,您可以确保 reducer 只会收到一次给定的密钥(您的朋友 ID),并且您只需将其写出一次,而无需迭代这些值。由于这些值无论如何都是空的,因此没有必要进行迭代(更不用说,如果你迭代你会多次写出键,你只希望它写一次以确保它是不同的。)

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

于 2013-04-26T14:14:25.323 回答