使用 MongoDB 进行文档查询
MongoDB允许使用与SQL非常相似的语法和语义进行文档查询。
具有讽刺意味的是,与NoSQL世界中SQL的相似性使得在MongoDB中查询文档变得简单而强大。
您可以直接访问一些嵌套的 MongoDB 文档
启动 MongoDB 服务器并使用 mongo JavaScript shell 连接到它。
使用 using mydb 命令切换到 mydb 数据库。
首先,获取订单集合中的所有文档,如下所示:
db.orders.find()
现在,开始过滤集合。获取 2010 年 10 月 25 日之后的所有订单,即大于 2010 年 10 月 25 日 order_date。首先创建一个日期对象。在 JavaScript shell 中,它将是:
var refdate = new Date(2010, 9, 25);
JavaScript 日期的月份从 0 而不是 1 开始,所以数字 9 表示 Python October.In 相同的变量创建可能是这样的:
from datetime import datetime
refdate=datetime(2010, 10, 25)
在 Ruby 中是这样的:
require 'date'
refdate=Date.new(2010, 10, 25)
然后,在比较器中传递 refdate,该比较器将 order_date feld 值与 refdate 进行比较。查询如下:
db.orders.find({“order_date”: {$gt: refdate}});
MongoDB支持多种比较器,包括小于,大于,小于或等于,大于或等于,等于和不等于。此外,它还支持集合包含和排除逻辑运算符,例如包含在给定集合中和不包含在给定集中。
数据集是嵌套文档,因此基于嵌套属性的值进行查询可能很有用。在 MongoDB,做到这一点很容易。使用点表示法遍历树可以访问任何嵌套字段。若要从订单集合中获取行项名称为 latte 的所有文档,请编写以下查询:
db.orders.find({ “line_items.item.name”:“latte”})
无论存在单个嵌套值还是像订单集合中那样存在单个嵌套值的列表,点表示法都有效。
MongoDB表达式匹配支持正则表达式。正则表达式可以在嵌套文档中使用,就像它们用于顶级字段一样。
在关系数据库中,索引是加快查询速度的明智方法。一般来说,工作方式很简单。索引提供了一种基于 B 树结构的高效查找机制,可避免完整的表扫描。由于搜索的数据较少,无法查找相关记录,因此查询速度更快、效率更高。
MongoDB支持索引的概念来加速查询。默认情况下,所有集合都根据_id值编制索引。除了这个默认索引之外,MongoDB还允许您创建二级索引。可以在顶级字段级别或嵌套的 feld 级别创建二级索引。例如,您可以为行项目的数量值创建一个索引,如下所示:
db.orders.ensureIndex({ “line_items.quantity” : 1});
现在,查询行项目数量为 2 的所有文档可以相当快。尝试运行以下查询:
db.orders.find({ “line_items.quantity”:2});
索引与表分开存储,它们会占用命名空间。
MongoDB数据访问看起来相当简单,丰富和健壮。但是,并非所有 NoSQL 存储都是如此,尤其是对于面向列的数据库。
本文正在参加「金石计划 . 瓜分6万现金大奖」