MongoDB读操作(Read)

本文将介绍MongoDB读操作(Read)

读取操作从集合中检索文档;即查询集合中的文档。MongoDB 提供了从集合读取文档的下列方法:

  • db.collection.find()

可以指定查询筛选器或标识要返回的文档的条件。如下图:

MongoDB读操作(Read)

下面提供了使用 mongo shell 中的 db.Collection.find() 方法进行查询操作的示例。下面的示例使用 inventory 集合。若要填充 inventory 集合,请运行以下命令:

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

选择集合中的所有文档

若要选择集合中的所有文档,请将一个空文档作为查询筛选器参数传递给 find 方法。查询筛选器参数确定选择条件:

db.inventory.find({})

此操作对应于以下SQL语句:

SELECT * FROM inventory

指定相等条件

若要指定相等条件,请在查询筛选文档中使用 <field>:<value> 表达式:

{ <field1>: <value1>, ... }

以下示例从 inventory 集合中选择状态等于 “D” 的所有文档:

db.inventory.find( { status: "D" } )

此操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "D"

使用查询运算符指定条件

查询筛选器文档可以使用查询运算符以下列形式指定条件:

{ <field1>: { <operator1>: <value1> }, ... }

以下示例从 inventory 集合中检索状态等于 “A” 或 “D” 的所有文件:

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

注意:虽然可以使用 $or 运算符表示此查询,但在对同一字段执行等式检查时,请使用 $in 运算符而不是 $or 运算符。

该操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status in ("A", "D")

比较运算符(Comparison)

Name

Description

$eq

匹配等于指定值的值。

$gt

匹配大于指定值的值。

$gte

匹配大于或等于指定值的值。

$in

匹配数组中指定的任何值。

$lt

匹配小于指定值的值。

$lte

匹配小于或等于指定值的值。

$ne

匹配不等于指定值的所有值。

$nin

不匹配数组中指定的值。

逻辑运算符(Logical)

Name

Description

$and

使用逻辑 AND 联接查询子句,返回与这两个子句的条件匹配的所有文档。

$not

反转查询表达式的效果,并返回与查询表达式不匹配的文档。

$nor

使用逻辑 nor 连接查询子句,将返回所有无法匹配这两个子句的文档。

$or

使用逻辑 or 连接查询子句,将返回与任一子句的条件匹配的所有文档。


基本运算符(Element)

Name

Description

$exists

匹配具有指定字段的文档。

$type

如果字段为指定类型,则选择文档。

计算运算符(Evaluation)

Name

Description

$expr

允许在查询语言中使用聚合表达式。

$jsonSchema

根据给定的JSON模式验证文档

$mod

对字段的值执行模块化操作,并选择具有指定结果的文档。

$regex

选择值与指定正则表达式匹配的文档。

$text

执行文本搜索。

$where

匹配满足JavaScript表达式的文档。

地理空间(Geospatial)

Name

Description

$geoIntersects

Selects geometries that intersect with a GeoJSON geometry. The 2dsphere index supports $geoIntersects.

$geoWithin

Selects geometries within a bounding GeoJSON geometry. The 2dsphere and 2dindexes support $geoWithin.

$near

Returns geospatial objects in proximity to a point. Requires a geospatial index. The 2dsphere and 2d indexes support $near.

$nearSphere

Returns geospatial objects in proximity to a point on a sphere. Requires a geospatial index. The 2dsphere and 2d indexes support $nearSphere.


数组操作符(Array)

Name

Description

$all

匹配包含查询中指定的所有元素的数组。

$elemMatch

如果数组字段中的元素匹配所有指定的$elemMatch条件,则选择document。

$size

如果数组字段为指定大小,则选择文档。


按位操作符(Bitwise)

Name

Description

$bitsAllClear

Matches numeric or binary values in which a set of bit positions all have a value of 0.匹配数值或二进制值,其中一组位位置的值均为0。

$bitsAllSet

Matches numeric or binary values in which a set of bit positions all have a value of 1.匹配数值或二进制值,其中一组位位置的值均为1。

$bitsAnyClear

Matches numeric or binary values in which any bit from a set of bit positions has a value of 0.匹配数值或二进制值,其中来自一组位位置的任何位的值为0。

$bitsAnySet

Matches numeric or binary values in which any bit from a set of bit positions has a value of 1.匹配来自一组位位置的任何位值为1的数值或二进制值。


注释(Comments)

Name

Description

$comment

给查询添加一个注释


投影运算(Projection Operators)

Name

Description

$

项目数组中与查询条件匹配的第一个元素。

$elemMatch

项目数组中与指定的$elemMatch条件匹配的第一个元素。

$meta

预测在$text操作期间分配的文档得分。

$slice

限制从数组投影的元素数。支持跳过和限制切片。


AND条件

复合查询可以为集合的文档中的多个字段指定条件。隐含地,逻辑连接 AND 连接复合查询的子句,以便查询在集合中选择与所有条件匹配的文档。


以下示例检索 inventory 集合中状态等于 “A” 且 qty 小于 ($lt)30 的所有文档:

db.inventory.find( { status: "A", qty: { $lt: 30 } } )

该操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "A" AND qty < 30


OR条件

使用 $or 运算符,您可以指定一个复合查询,它将每个子句与逻辑或连接连接起来,以便查询在集合中选择至少匹配一个条件的文档。


以下示例检索 inventory 集合中状态等于 “A” 或 qty 小于($lt)30 的所有文档:

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

该操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "A" OR qty < 30


指定 AND 以及 OR 条件

在下面的示例中,复合查询文档选择集合中 status  等于“A” 且 qty 小于($lt)30 或 item 以字符p开头的所有文档:

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )

该操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

注意:MongoDB 支持正则表达式 $regex 查询来执行字符串模式匹配。

天下之事常成于困约,而败于奢靡。——陆游
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号