26

根据文档,“$”是为操作员保留的。但是,如果您查看组运算符,则值需要以美元为前缀。这些值不是运算符。那么在这种情况下是什么意思呢?下面的例子:

db.article.aggregate(
    { $group : {
        _id : "$author",
        docsPerAuthor : { $sum : 1 },
        viewsPerAuthor : { $sum : "$pageViews" }
    }}
);

为什么 pageViews 需要一个领先的美元符号?我已经在本地尝试过,没有美元符号就无法使用。

4

3 回答 3

28

在这种情况下,“$string”表示您要在处理的文档中使用名为“string”的键的。与“字符串”形成对比,后者将是一个文字字符串。

于 2013-04-28T19:23:47.170 回答
13

$field-name当您想引用原始或中间文档中的字段时,您可以使用格式。在这里,您汇总了按作者分组的所有页面浏览量。

于 2013-04-28T17:56:29.387 回答
13

$<field>简称$$CURRENT.<field>

“$”等价于“$$CURRENT”。其中 CURRENT 是一个系统变量,在大多数阶段默认为当前对象的根,除非在特定阶段另有说明。CURRENT 可以反弹。

并且, “除非另有说明,否则所有阶段都以.开头。”CURRENTROOT

最后:

" ROOT: 引用当前在聚合管道阶段处理的根文档,即顶级文档。" 参考:系统变量

ROOT,因此CURRENT,是被分组的文档,并$<field>访问 的属性CURRENT

注意

CURRENT是可修改的。但是,由于$<field>等价于$$CURRENT.<field>,因此重新绑定CURRENT会改变$访问的含义。” 参考:系统变量

于 2018-05-07T13:38:28.127 回答