美元和“的重要性”&引用;在mongodb
我正在学习MongoDB。对“$”的用法感到困惑 我收集的数据如下所示:美元和“的重要性”&引用;在mongodb,mongodb,Mongodb,我正在学习MongoDB。对“$”的用法感到困惑 我收集的数据如下所示: { _id: 1, "name": "test", "city": "gr", "sector": "IT", "salary":1000 } 我在执行以下查询时发现以下输出: Query Result db.user.find({salary:2000}); Works db.user.find({$salary
{
_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 takes{field:value},您的第一个查询是有效的,因为salary是有效的字段。
您的第二个查询不起作用,因为没有字段$salary
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:expression}。所以你们实际上是在那个里保留表达式,而不是一个字段
现在看一下这个。
表达式可以是字段路径和系统变量、文字、表达式对象和表达式运算符
查询编号3、4、5不是表达式对象或表达式运算符。因此,让我们排除这些选项
现在让我们看一看。
它声明文字可以是任何类型,但是MongoDB解析以美元符号开头的文字作为字段的路径
最后看一看。
它表示“要指定字段路径,请使用前缀为美元符号$…的字符串,例如,$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"}}});
查询仍然可以正常运行,但结果将为null。
我希望这有帮助,这是一个非常有趣的聚会