【问题标题】:MongoDB: How to put conditions on the second element of a two element Number array in mongodb?MongoDB:如何在mongodb中的双元素数字数组的第二个元素上设置条件?
【发布时间】:2016-11-02 13:30:52
【问题描述】:

我有 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”数组来定义纬度和经度的条件。问题是我看不到限制数组的第一个组件或第二个组件的位置。它没有具体说......你能看到他们要求限制纬度和另一个要求限制经度的以下练习中的区别吗?具体怎么说“坐标数组的第一个分量必须小于...”或者“坐标数组的第二个分量必须是...”非常感谢

  1. 编写一个 MongoDB 查询以查找不准备任何“美国”美食且其评分超过 70 且纬度低于 -65.754168 的餐厅。进入编辑器

    db.restaurants.find( {$和: [ {"cuisine" : {$ne :"美国"}}, {"grades.score" : {$gt : 70}}, {“address.coord”:{$lt:-65.754168}} ] } );

  2. 编写一个 MongoDB 查询来查找不准备任何“美国”美食且得分超过 70 且不位于经度小于 -65.754168 的餐厅。 注意:在不使用 $and 运算符的情况下执行此查询。进入编辑器

    db.restaurants.find( {$查询: { “美食”:{$ne:“美国”}, "grades.score" :{$gt: 70}, “address.coord”:{$lt:-65.754168} } });

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    回答您的问题,生成翻译此命令的查询

    "坐标数组的第一个元素必须小于..."

    "坐标数组的第二个元素必须是...."

    您需要使用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 运算符的显式 AND。

    【讨论】:

    • 谢谢!我知道那个例子是错误的......那个网站有很多错误的例子......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多