zag*_*art 9 mongodb mongodb-query aggregation-framework
$facet从 3.4 开始在 mongo 中有聚合阶段 - 这很酷。它允许在同一组输入文档的单个阶段内处理多个聚合管道。
但是它不允许在另一个中使用一个 $facet。引用:“任何其他聚合阶段也可以与 $facet 一起使用,除了:$facet、$out、$geoNear、$indexStats、$collStats”
有人明白原因吗?
我只想这样使用 $facet:
db.collection.aggregate([{
$facet: {
'first': [
$facet: { // here is the sub $facet
'subFirst1': [],
'subFirst2': []
}
],
'second': [
//...
]
}
}])
Run Code Online (Sandbox Code Playgroud)
这应该产生一个文档,如:
{
first: {
subFirst1: {...},
subFirst2: {...}
},
second: {...}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个它会抛出错误:
specified stage is not allowed to be used within a $facet stage: 0: { $facet: { subFirst1: [ ... ] } }"
Run Code Online (Sandbox Code Playgroud)
这不仅仅是关于方面。一般来说,不允许在聚合阶段创建子字段。例如,以下创建复数值的尝试失败。
$addField: {
a.b: "foo"
}
Run Code Online (Sandbox Code Playgroud)
这是很有意义的,因为值可以是原始类型、复杂对象或数组。不知道这是否是一个令您满意的答案,也许这是一个小小的安慰,因为这不仅适用于方面,而且适用于所有一般作业。
我还想说你的意图是合理的。特别是在数据库系统中,不需要模式并且每个文档都可以与其他文档不同,因此拥有该功能会很好。如果您实际上操作数据,您可以使用set. 但根据您的中间结果,您不允许执行该操作。人们可能会认为这有点不一致。
| 归档时间: |
|
| 查看次数: |
4609 次 |
| 最近记录: |