[Mongodb 5.0]比较运算符

前言

本章节对应的是官网【Comparison Query Operators — MongoDB Manual

正文

比较运算符有以下几个:

Name

Description

$eq

等于

$gt

大于

$gte

大于等于

$in

包含

$lt

小于

$lte

小于等于

$ne

不等于

$nin

不在数组中

 ● $eq

$eq用来查找出字段的值等于指定值的记录。

用法:

{ <field>: { $eq: <value> } }

例子:查找出qty字段的值等于20的记录,对应官网【Match a Document Value】

数据源:

{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }

查询语句:

db.inventory.find( { qty: { $eq: 20 } } )

等同于

db.inventory.find( { qty: 20 } )

结果

例子:查找name字段的值等于ab的记录(应为name属于item,所以这种形式也成为了嵌入式属性的查询),对应官网【Match a Document Value】

查询语句:

db.inventory.find( { "item.name": { $eq: "ab" } } )

例子:查找tags字段中(数组中)含有某一个值的记录

查询语句:

db.inventory.find( { tags: { $eq: "B" } } )
//等同于
db.inventory.find( { tags: "B" } )

结果

 当查找的字段为数组时,当查询条件只有一个值时候,只要这个值包含在数组中就行。但如果查询的条件为多个值时,那么只有查询规则就会有变化,看下面的例子

例子:查找tags字段中(数组中)含有某个数组的记录,对应官网【Match an Array Value】
当查询条件是一个数组时,那么只有字段中有一个数组与之完全相同才满足条件。

查询语句:

db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
//等同于
db.inventory.find( { tags: [ "A", "B" ] } )

结果:

{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }

结果中可以发现,A,B都是没有其他值的数组,只要含有A,B的数组中有其他值都不满足。结果中的第二条记录满足是因为C大数组中的一部分,而不含在A,B这个数组中。

例子:查询条件是正则表达式,对应官网【Regex Match Behaviour】

在mongodb中正则表达式用 /表达式/ 这种方式来表示。当我们是用$eq时,双斜杠会被当成字符串的一部分,而不会当做正则表达式。这点一定要注意。

要在$eq中使用正则表达式,必须同时使用$regex(这属于显式执行),下面看例子:

创建一个company表,插入数据如下:

{ _id: 001, company: "MongoDB" }
{ _id: 002, company: "MongoDB2" }

执行正则表达式的查询:

db.company.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } )
// {_id: 0 }表示查询结果不显示id字段

执行结果:

另外一种隐式的使用正则表达式的方式就是不要使用$eq,如下:

db.company.find( { company: /MongoDB/ }, {_id: 0 } ) // {_id: 0 }表示查询结果不显示id字段

这种方式属于隐式执行(不使用$regex)

=======================================================================

$gt

$gt比较符用来查询出指定字段的值大于特定值的那些记录,语法如下:

{ field: { $gt: value } }

先导入下面的数据源: 

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 30,
      "carrier": { "name": "Shipit", "fee": 3 }
   },
   {
      "item": "bolts", "quantity": 50,
      "carrier": { "name": "Shipit", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 10,
      "carrier": { "name": "Shipit", "fee": 1 }
   }
] )

然后通过例子来讲解。

例子:查询quantity 大于20的记录

db.inventory.find( { quantity: { $gt: 20 } } )

执行结果:

 例子:查询出carrier.fee值大于2的记录,给这个记录添加一个price字段,并给price字段的值设置为9.99

db.inventory.updateOne(
   { "carrier.fee": { $gt: 2 } }, { $set: { "price": 9.99 } }
)

执行结果:

 注意:因为我们用的是updateOne,所以只讲第一条满足条件的记录添加了price字段。

=======================================================================

●$gte

$gte就是大于等于的意思,具体语法如下:

{ field: { $gte: value } }

具体用法更上面的$gt一样,这里就不做例子和说明了。

=======================================================================

●$in

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }

$in操作符所用:当表中记录的指定字段的值等于$in指定的数组里的任何一个值时,这条记录就满足条件,会被查询出来。 

例子:

首先创建表,插入基础数据:

db.inventory.insertMany( [
   { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] },
   { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] },
   { "item": "Maps", "tags": [ "office", "storage" ] },
   { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] }
] )

例子1:查询quantity字段的值等于5或者15的记录

mytest> db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )

结果

 这个$in的用法感觉跟or很相似,但是当对一个字段进行操作的时候(比如此处的5或者15都是值同一个字段quantity),一般用$in。

例子2:将tags中含有school或者home的记录添加一个exclude字段并设置为false

db.inventory.updateMany(
   { tags: { $in: [ "home", "school" ] } },
   { $set: { exclude: false } }
)

结果:

 例子3:在$in操作附中使用正则表达式,查询tags字段中以be或者st开头的记录

db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )

结果:

=======================================================================

●$lt

{ field: { $lt: value } }

$lt等同于sql中的小于号的意思。用来查询出指定字段的值小于特定值的那些记录。

用法与$gt完全相同,这里就不在编写例子,可以直接使用$gt中的数据进行测试就行。

=======================================================================

●$lte

{ field: { $lte: value } }

$lte等同于sql中的小于等于的意思。用来查询出指定字段的值小于等于特定值的那些记录。

用法与$gte完全相同,这里就不在编写例子,可以直接使用$gte中的数据进行测试就行。

=======================================================================

 ●$ne

{ field: { $ne: value } }

$ne等同于sql中的不等于的意思。用来查询出指定字段的值不等于特定值的那些记录

例子:

首先,创建基础数据

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 30,
      "carrier": { "name": "Shipit", "fee": 3 }
   },
   {
      "item": "bolts", "quantity": 50,
      "carrier": { "name": "Shipit", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 10,
      "carrier": { "name": "Shipit", "fee": 1 }
   }
] )

例子1:查询quantity不等于30的记录

db.inventory.find( { quantity: { $ne: 30 } } )

结果:

 

 

 例子2:将carrier.fee不等于1的记录的price的价格设置为9.9

db.inventory.updateMany( { "carrier.fee": { $ne: 1 } }, { $set: { "price": 9.99 } } )

结果:

 

=======================================================================

●$nin

{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }

$nin就是not in的意思。用来查询出指定字段的值不在$nin指定的数组中的记录或者这个指定字段本身就不存在的记录。

例子:

首先,创建基础数据

db.inventory.insertMany( [
   { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] },
   { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] },
   { "item": "Maps", "tags": [ "office", "storage" ] },
   { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] }
] )

例子1:查询出quantity不等于5或者15的记录

db.inventory.find( { quantity: { $nin: [ 5, 15 ] } }, { _id: 0 } )

结果:

 从结果可以看出,在开头处的定义说明。除了quantity的值不等于5或者15的会被查出来,没有quantity字段的也会被查出来

例子2:将tags中没有school的记录查询出来,添加exclude字段并设置值为true

db.inventory.updateMany(
    { tags: { $nin: [ "school" ] } },
    { $set: { exclude: true } }
)

结果:

 

到此,Mongodb的比较操作符就讲解完了,大家可以对照着官网的文档中[references]->[operators]->[query and projection operators]->[comparition query operators]来看我的这篇文章。

MongoDB是一种面向文档的数据库管理系统,它提供了一个灵活、高性能和高可用性的数据库平台。在Windows操作系统上安装和配置MongoDB 5.0,通常需要创建一个配置文件(conf文件),以便可以自定义数据库的行为。以下是配置MongoDB 5.0的步骤: 1. 首先,你需要从MongoDB官方网站下载Windows版本的MongoDB 5.0。 2. 安装MongoDB之前,建议创建一个专门的文件夹用于存放MongoDB的相关文件。例如,可以在`C:\mongodb\`路径下创建一个文件夹。 3. 解压缩下载的MongoDB安装文件到你创建的文件夹中。 4. 创建一个名为`mongod.cfg`的配置文件,并放置到MongoDB安装目录下的`bin`子目录中。这个配置文件一般包含了如下几个关键部分: - storage配置部分,指定数据存储的位置,例如: ``` storage: dbPath: C:\mongodb\data journal: enabled: true ``` - systemLog配置部分,指定日志文件的路径和日志级别,例如: ``` systemLog: destination: file path: C:\mongodb\log\mongod.log logAppend: true ``` - net配置部分,指定监听的端口,默认为27017,例如: ``` net: port: 27017 ``` - replication配置部分,用于设置复制功能的相关配置,如副本集名称等(如果需要)。 5. 在MongoDB安装目录下的`bin`子目录中创建一个名为`mongo.config`的文件,该文件用于配置MongoDB服务运行时需要的参数,比如: ``` --config C:\mongodb\bin\mongod.cfg ``` 6. 完成配置文件后,你需要通过命令行来启动MongoDB服务。打开一个命令行窗口,切换到MongoDB的`bin`目录,然后使用以下命令启动MongoDB服务: ``` .\mongod.exe --config .\mongo.config ``` 这会使用`mongo.config`中指定的`mongod.cfg`配置文件启动MongoDB服务。 7. 可以通过另外的命令行窗口运行`mongo.exe`来连接MongoDB服务,进行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值