Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
美元和“的重要性”&引用;在mongodb_Mongodb - Fatal编程技术网

美元和“的重要性”&引用;在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

我正在学习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 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。 我希望这有帮助,这是一个非常有趣的聚会