MongoDB 查询文档中使用元素选择器、数组选择器

本文介绍了MongoDB中用于文档查询的元素选择器和数组选择器,包括$exists判断元素是否存在,$type选择指定类型的元素,$all筛选包含所有指定元素的数组,$elemMatch查找满足特定条件的数组元素,以及$size筛选数组长度。这些选择器帮助用户更精确地定位和过滤数据。
摘要由CSDN通过智能技术生成

上一篇 MongoDB 查询文档中使用比较选择器、逻辑选择器https://blog.csdn.net/m1729339749/article/details/129965699 中介绍了MongoDB查询文档中使用比较选择器和逻辑选择器,这里我们继续介绍MongoDB的文档查询,这里我们介绍元素选择器、数组选择器。

一、元素选择器

1、判断元素是否存在($exists)

语法:{ field: { $exists: <boolean> } }

例子:

查询集合test所有的文档:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
{ "_id" : ObjectId("642d273d5f3cbd93e8be96c4"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642d27485f3cbd93e8be96c5"), "id" : "1004", "name" : "赵六" }

下面我们查询年龄存在的成员: 

db.test.find({"age": { $exists: true }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
{ "_id" : ObjectId("642d273d5f3cbd93e8be96c4"), "id" : "1001", "name" : "张三", "age" : 20 }

 下面我们查询年龄不存在的成员: 

db.test.find({"age": { $exists: false }});

 查询的结果如下:

{ "_id" : ObjectId("642d27485f3cbd93e8be96c5"), "id" : "1004", "name" : "赵六" }

2、选择元素为指定类型的文档($type)

语法:{ field: { $type: <BSON type> } }

          或 { field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }

其中BSON type可以使用别名也可以使用编号,如下:

类型

编号

别名

Double

1

"double"

String

2

"string"

Object

3

"object"

Array

4

"array"

Binary data

5

"binData"

Undefined

6

"undefined"

ObjectId

7

"objectId"

Boolean

8

"bool"

Date

9

"date"

Null

10

"null"

Regular Expression

11

"regex"

DBPointer

12

"dbPointer"

JavaScript

13

"javascript"

Symbol

14

"symbol"

JavaScript code with scope

15

"javascriptWithScope"

32-bit integer

16

"int"

Timestamp

17

"timestamp"

64-bit integer

18

"long"

Decimal128

19

"decimal"

Min key

-1

"minKey"

Max key

127

"maxKey"

例子:

下面我们查询名称为字符串的成员: 

db.test.find({"name": { $type: "string" }});

此查询等效于:

db.test.find({"name": { $type: 2 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
{ "_id" : ObjectId("642d273d5f3cbd93e8be96c4"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642d27485f3cbd93e8be96c5"), "id" : "1004", "name" : "赵六" }

二、数组选择器

1、筛选数组字段中包含所有指定元素的文档($all)

语法:{ <field>: { $all: [ <value1> , <value2> ... ] } }

例子:

查询集合test所有的文档:

{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] }
{ "_id" : "1002", "name" : "李四", "fruits" : [ "banana", "apple" ] }
{ "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ] }

下面我们查询水果包含orange, apple的成员: 

db.test.find({ "fruits": {$all: [ "orange", "apple" ]}});

此查询等效于:

db.test.find(
    { 
        $and: [ 
            { "fruits": "orange" }, 
            { "fruits": "apple" } 
        ] 
    }
);

查询的结果如下:

{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] }
{ "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ] }

2、筛选数组字段中至少有一个元素满足匹配条件的文档($elemMatch)

语法:{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

例子:

下面我们查询水果包含orange的成员: 

db.test.find(
    { 
        "fruits": {
            $elemMatch: { $eq: "orange" } 
        } 
    }
);

查询的结果如下:

{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] }
{ "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ] }

 3、筛选数字字段长度为指定大小的文档($size)

语法:{ <field>: { $size: <size> } }

例子:

下面我们查询水果长度为2的成员: 

db.test.find({ "fruits": { $size: 2 } });

查询的结果如下:

{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] }
{ "_id" : "1002", "name" : "李四", "fruits" : [ "banana", "apple" ] }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值