根据文档,“$”保留给运营商。但是,如果查看组运算符,则值必须以美元为前缀。这些值不是运算符。那么在这种情况下它意味着什么呢?示例如下:
db.article.aggregate(
{ $group : {
_id : "$author",
docsPerAuthor : { $sum : 1 },
viewsPerAuthor : { $sum : "$pageViews" }
}}
);
为什么pageView需要一个领先的美元符号?我在当地尝试过,没有美元符号就行不通。
当您要引用原始文档或中间文档中的字段时,可以使用$field-name
格式。在这里,您要总结所有按作者分组的页面浏览量。
在这种情况下,“$ string”表示您要在已处理文档中使用名为“string”的键的值。与“string”形成对比,后者是一个文字字符串。
$<field>
is short for $$CURRENT.<field>
:
“$”相当于“$$ CURRENT”。其中CURRENT是一个系统变量,在大多数阶段默认为当前对象的根,除非在特定阶段另有说明。 CURRENT可以反弹。
而且,"Unless documented otherwise, all stages start with CURRENT
the same as ROOT
."
最后:
“
ROOT
:引用根文档,即顶级文档,当前正在聚合管道阶段进行处理。” Reference: System Variables
即ROOT
,因此CURRENT
,是被分组的文件,$<field>
访问CURRENT
的财产。
注意:
CURRENT
是可修改的。然而,由于$<field>
相当于$$CURRENT.<field>
,重新绑定CURRENT
改变了$
访问的含义。“Reference: System Variables