MongoDB数组查询

在这里插入图片描述

MongoDB数组查询

本文提供了在 mongosh 中使用db.collection.find()方法对数组字段进行查询操作的示例。 本文的示例使用清单(inventory)集合。 要填充清单集合,请运行以下命令:

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);

数组匹配

要在数组上指定相等条件,请使用查询文档{ <field>: <value> }其中<value>是要匹配的确切数组,包括元素的顺序。
以下示例查询字段标签值是一个数组的所有文档,其中两个元素'red''blank'按指定顺序排列:

db.inventory.find( { tags: ["red", "blank"] } )

相反,如果您希望找到一个包含元素redblank的数组,但不考虑数组中的顺序或其他元素,请使用$all运算符:

db.inventory.find( { tags: { $all: ["red", "blank"] } } )

查询数组元素

要查询数组字段是否包含至少一个具有指定值的元素,请使用过滤器{ <field>: <value> }其中<value>是元素值。
以下示例查询所有文档,其中tags是一个包含字符串'red'的数组:

//tags中存在“red”即匹配成功
db.inventory.find( { tags: "red" } )

要对数组字段中的元素指定条件,请在查询过滤器文档中使用查询运算符:

{ <array field>: { <operator1>: <value1>, ... } }

例如,以下操作查询数组 dim_cm 包含至少一个大于 25 的元素的所有文档:

//数组dim_cm中只要有一个元素大于25即为匹配成功
db.inventory.find( { dim_cm: { $gt: 25 } } )

多条件数组元素查询

在数组元素上指定复合条件时,您可以指定查询,使得单个数组元素满足这些条件或数组元素的任意组合满足条件。

1. 复合过滤条件查询数组元素

以下示例查询dim_cm数组包含以某种组合满足查询条件的元素的文档,多个条件之间的关系是OR
例如,一个元素可以满足大于 15 的条件,而另一个元素可以满足小于 20 的条件,或者单个元素可以同时满足这两个条件:

//数组元素满足一个查询条件即可
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )

2. 查询满足多个条件的数组元素

使用$elemMatch算符对数组元素指定多个条件,以使至少一个数组元素满足所有指定条件,条件之间的关系是AND
以下示例查询dim_cm数组包含至少一个大于 ($gt) 22** 且**小于 ($lt) 30 的元素的文档:

//数组元素必须同时满足多个查询条件
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )

3. 按数组索引位置查询元素

使用点表示法,您可以在数组的特定索引或位置指定元素的查询条件。 该数组使用从零开始的索引。

使用点表示法查询时,字段和嵌套字段必须在引号内。

以下示例查询数组dim_cm中第二个元素大于 25 的所有文档:

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )

4. 按数组长度查询数组

使用$size运算符按元素数查询数组。 例如,以下选择数组标签具有 3 个元素的文档。

db.inventory.find( { "tags": { $size: 3 } } )
  • 18
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@魏大大

我们都没有打赏的习惯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值