我有一个postgresql和关系数据库的背景,我试图再次给mongo一个机会,因为它似乎有一些用途。
我在这个http://www.w3resource.com/mongodb-exercises/网站上做练习,该网站对具有以下结构的文档进行操作:

{
  "address": {
     "building": "1007",
     "coord": [ -73.856077, 40.848447 ],
     "street": "Morris Park Ave",
     "zipcode": "10462"
  },
  "borough": "Bronx",
  "cuisine": "Bakery",
  "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 }
  ],
  "name": "Morris Park Bake Shop",
  "restaurant_id": "30075445"
}

在两个练习中,您使用“coord”数组操作,定义纬度和经度的条件。问题是,我不知道在哪里限制数组的第一个或第二个组件。这并不是说得特别……你能看出以下练习的区别吗?他们要求限制纬度,而另一个练习要求限制经度?。您如何明确地说“coords数组的第一个组件必须小于…”或“coords数组的第二个组件必须小于…”非常感谢
编写一个MongoDB查询,查找不准备任何“美式”菜肴的餐厅,它们的等级分数大于70,纬度小于-65.754168。去找编辑
db.餐厅。查找(
{ $和:
[
{“美食”:{$ne:“美国”},
{“grades.score”:{$gt:70},
{“address.coord”:{$lt:-65.754168}
]
}

编写MongoDB查询,查找不准备任何“美式”菜肴且得分超过70且经度不低于-65.754168的餐厅。
注意:在不使用$和运算符的情况下执行此查询。去找编辑
db.餐厅。查找(
{$查询:
{
“美食”:{$ne:“美式”},
“grades.score”:{$gt:70},
“address.coord”:{$lt:-65.754168}
}
(});

最佳答案

回答您的问题,生成一个查询来转换此命令
“Coords数组的第一个组件必须小于…”

“Coords数组的第二个组件必须是….”
您需要使用dot notation通过从零开始的索引位置访问数组元素,并将数组名称与点(.)和从零开始的索引位置连接起来,并用引号括起来:

"<array>.<index>"

对于上面的示例,数组的第一个元素应该包含经度值,第二个元素应该包含纬度值。从而获得经度
你需要
"address.coord.0"
为了纬度
"address.coord.1"
因此,对于这两个练习,正确的查询如下:
找那些不准备美国菜的餐馆
成绩70分以上,纬度-65.754168分以下:
db.restaurants.find({
    "cuisine": { "$ne": "American "},
    "grades.score": { "$gt": 70 },
    "address.coord.1": { "$lt": -65.754168 }
});

找那些不准备美国菜的餐馆
成绩超过70分,不在经度范围内
小于-65.754168。
db.restaurants.find({
    "cuisine": { "$ne": "American "},
    "grades.score": { "$gt": 70 },
    "address.coord.0": { "$gte": -65.754168 }
});

在以上两个示例中,当指定以逗号分隔的表达式列表时,$and被隐式使用。当必须在多个表达式中指定同一字段或运算符时,必须使用显式and with$and运算符。

09-25 17:16
查看更多