自3.4以来mongo中有$facet
聚合阶段 -
很酷。它允许在同一组输入文档的单个阶段内处理多个聚合管道。
但它不允许在另一个中使用一个$ facet。引用:"任何其他聚合阶段也可以与$ facet一起使用,除了:$ facet,$ out,$ geoNear,$ indexStats,$ collStats"
有谁理解原因?
我只想以这种方式使用$ facet:
db.collection.aggregate([{
$facet: {
'first': [
$facet: { // here is the sub $facet
'subFirst1': [],
'subFirst2': []
}
],
'second': [
//...
]
}
}])
这应该产生一个类似的文档:
{
first: {
subFirst1: {...},
subFirst2: {...}
},
second: {...}
}
如果我试试这个就会抛出错误:
specified stage is not allowed to be used within a $facet stage: 0: { $facet: { subFirst1: [ ... ] } }"
答案 0 :(得分:0)
不仅涉及方面。通常,不允许在聚合阶段创建子字段。例如,以下创建复杂值的尝试失败。
completionHandler(.alert)
这很有意义,因为值可以是原始类型,复杂对象或数组。不知道这是否对您来说是令人满意的答案,也许这只是一点安慰,它不仅对各个方面都很重要,而且对所有一般任务也很重要。
我也想说你的意图是合理的。尤其是在不需要模式且每个文档都可以彼此不同的数据库系统中,拥有该功能将是很好的。如果您实际操作数据,则可以使用$addField: {
a.b: "foo"
}
。但是在中间结果上,不允许您执行该操作。有人会觉得这有点矛盾。