【发布时间】:2016-03-08 01:10:27
【问题描述】:
我有这样的文件:
{
"_id" : ObjectId("565e906bc2209d91c4357b59"),
"userEmail" : "abc@example.com",
"subscription" : {
"project1" : {
"subscribed" : false
},
"project2" : {
"subscribed" : true
}
}
}
{
"_id" : ObjectId("565e906bc2209d91c4357b59"),
"userEmail" : "mno@example.com",
"subscription" : {
"project1" : {
"subscribed" : true
},
"project2" : {
"subscribed" : true
},
"project3" : {
"subscribed" : true
}
}
}
我想将subscribed 标志设置为true 的项目列表按用户分组。
例如,我期望的是:
abc@example.com - project2
mno@example.com - project1,project2,project3
我将有一个 cron 作业,它将订阅项目的相应详细信息发送到相应的邮件 ID。
我尝试过聚合,但聚合需要指定的键。在我的情况下,关键(即 Project1、Project2 等)是动态的。所以我在某处读到mapReduce 是正确的选择。但是我没有使用mapReduce的经验。
请帮助我解决这个问题,并通过更多解释让我理解如何处理这个问题。
【问题讨论】:
-
也许$redact 可以帮助这里删除带有
subscribed: false的数组条目。 -
如果您将 subscription 更改为数组 [{project:"project1", subscribed:true},...],则可以使用聚合框架轻松完成。否则,您必须使用 map-reduce 或一些客户端代码。
标签: mongodb mapreduce mongodb-query aggregation-framework