MongoDB Group by / Map reduce
大家好,我在 mongoDB 中有一个现有的消息传递模式,它运行良好。
1 2 3 4 5 6 7 8 9 10 | { "_id" : ObjectId("4f596b4543658618c0000004"), "user_id" : ObjectId("4f4c6c5143658618dc000002"), "body" :"message body", "from_user" : { "_id" : ObjectId("4f4c6b6943658618dc000001"), "name" :"Mister Quin" }, "created_at" : ISODate("2012-03-09T02:30:29Z") } |
现在我想显示给定用户已发送消息的人员列表。你可以把它想象成一个消息收件箱,它结合了我是发送者和接收者的消息,分别用 "user_id" 和 "from_user._id" 表示。因此,本质上,来自消息集合的两方之间的唯一消息分组。我能得到的任何帮助将不胜感激。我知道这可能是地图缩减问题。
我使用 mongoid 作为我的 ORM,但这在这里应该无关紧要。
谢谢。
你可以通过from_user._id和user_id来使用group和group。
1 2 3 4 | db.messages.group({key: {'from_user._id': 1, user_id: 1}, initial: {sum: 0}, reduce: function(doc, prev) {prev.sum += 1}, cond: {from_user._id: ObjectId("4f4c6b6943658618dc000001")}) |
这将返回奎因先生发消息的所有用户的列表,以及每个用户发消息的次数。确保您在 "from_user._id"
上有一个索引