1
"grades": [
     { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
     { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
     { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
     { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
     { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
  ],

这里的grades是一个由 [] 表示的数组,但内部字段score不是一个数组,因为它包含正常值 2 或 6。

那么,为什么下面的查询使用 $elemMatch 而不是score

db.restaurants.find({grades : { $elemMatch:{"score":{$gt : 90}}}});

https://www.w3resource.com/mongodb-exercises/mongodb-exercise-8.php

4

1 回答 1

1

根据文档

$elemMatch 运算符匹配包含数组字段的文档,其中至少一个元素匹配所有指定的查询条件。

因此,在这种情况下,左侧grades是您要查询的数组,使用$elemMatch. 右边代表一个查询score > 90),它针对数组的每个元素进行评估grades,如果它返回true任何元素,那么文档将被返回。

或者,在这种情况下,您可以使用点符号语法:

.find( { 'grades.score': { $gte: 90 } } )

这可能更直观。

于 2020-08-07T12:37:59.927 回答