$和“”在mongodb中的意义
问题描述:
我正在学习MongoDB。上的“$” 使用越来越困惑我有收集如下模式:
{
_id: 1,
"name": "test",
"city": "gr",
"sector": "IT",
"salary":1000
}
我发现下面的输出下面的查询执行:
Query Result
db.user.find({salary:2000}); Works
db.user.find({$salary:2000}); does not work(unknown top level operator: $salary)
db.user.aggregate({$group:{_id:null,avg:{$avg:"$salary"}}}); Works
db.user.aggregate({$group:{_id:null,avg:{$avg:$salary}}}); does not work($salary is not defined)
db.user.aggregate({$group:{_id:null,avg:{$avg:"salary"}}}); gives wrong output.
谁能请解释一下,什么是的语法意义“”和$在mongoDB中。
答
喜让我们来看看这些查询
1- db.user.find({salary:2000});
2- db.user.find({$salary:2000});
看看本作find。 根据这个查找需要{字段:值},您的第一个查询工作,因为薪水是有效的字段。 你的第二个查询不工作监守没有场$工资
3- db.user.aggregate({$group:{_id:null,avg:{$avg:"$salary"}}});
4- db.user.aggregate({$group:{_id:null,avg:{$avg:$salary}}});
5- db.user.aggregate({$group:{_id:null,avg:{$avg:"salary"}}});
对于聚集,让我们一起来看看这款$avg。 这里说$ avg需要{$ avg:expression}。所以你实际上在那里没有一个领域的表达。
现在看看这个为expression。表达式可以是字段路径和系统变量,文字,表达式对象和表达式运算符。
查询号3,4,5不是表达式对象或表达式运算符。所以让我们消除这些选项。
现在我们来看看$literal。 它指出文字可以是任何类型,但是MongoDB会将以美元符号开头的文字分析为字段的路径。
终于看看Field Path and System variables。 它声明“要指定一个字段路径,请使用以美元符号$前缀的字符串。例如,”$ user“指定用户字段的字段路径或”$ user.name“来指定字段到“user.name”字段的路径。“
这意味着您将$ salary指定为$ avg中的字段的路径:“$ salary”并且查询编号3有效。
查询编号4不起作用,因为$ salary是无效表达式。
这应该解释“”
查询号码5没有工作的重要意义,因为它再次没有发现任何领域的平均上。尽管它有效,因为它是一个有效的查询,它只是返回null。 你可以有
db.user.aggregate({$group:{_id:null,avg:{$avg:"some_non_existent_field"}}});
和查询将仍然运行良好,但你会得到空你的结果。 我希望这可以帮助,这是很多乐趣收集。