【发布时间】:2013-07-23 22:24:12
【问题描述】:
我是 MongoDB 新手,如果这个问题有明确的答案,请见谅...
上下文:
我遵循example in the MongoDB docs 使用map-reduce 实现分层聚合。该示例使用“复合”_id 字段作为 map-reduce 键,生成这样的聚合文档...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z") },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
这一切都很好。我的特定用例要求每个map 步骤发出几个相似键的值。比如……
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), hobby: "wizardry" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), gender: "male" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
(值相同,但_id 键略有不同。)
这也很好。
问题:
现在我想汇总我的分层集合(视图),其中包含具有多个不同复合 _id 字段的文档,但仅限于具有 $matching _id 字段的文档。例如,我想只聚合具有{u: String, d: Date, hobby: String} 类型_id 的文档或仅聚合具有_id 类型{u: String, d: Date} 的文档。
我知道我可以使用 $exists 运算符来限制应该和不应该允许哪些 _id 字段,但我不想为每个 _id 创建单独的聚合(可能很多)。
是否有一种简单的方法以编程方式将 $matching 文档限制为包含(或不包含)聚合中特定字段的文档?
【问题讨论】:
标签: mongodb aggregation-framework