我是 MongoDB 新手,所以如果这个问题有一个明显的答案,请原谅我......
语境:
我已经按照MongoDB 文档中的示例使用 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
字段的文档,但仅包含具有$match
ing_id
字段的文档。例如,我想仅聚合拥有{u: String, d: Date, hobby: String}
type_id
的文档或仅聚合具有 type 的_id
文档{u: String, d: Date}
。
我知道我可以使用$exists
运算符来限制_id
应该和不应该允许哪些字段,但我不想为每个_id
(可能很多)创建单独的聚合。
是否有一种简单的方法可以以编程方式将$match
文档限制为包含(或不包含)聚合中特定字段的文档?