当前位置: 首页 > article >正文

MongoDB 查询文档(1)

一、查询语法

本篇我们主要讲解在集合或视图中查询文档,首先说明一下查询的语法:

db.collection.find(query, projection, options)

此定义可以从集合或者视图中查找文档并返回一个游标(cursor);

参数

query: 此选项可选,用于指定查询过滤器,如果要查询集合中的所有文档,可省略此参数或者传递空文档{}

projection: 此选项可选,用于指定在文档中返回的字段,如果要返回匹配文档中的所有字段,可省略此参数。

options:此选项可选,用于指定查询的其他选项。可以用于修改查询行为以及返回结果的方法。

返回

一个指向符合查询条件的文档的游标。当 find() 方法"返回文档",该方法实际上是返回一个指向文档的游标。

二、Query选择器

1、比较筛选

1.1 相等($eq)

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

该表达式等效于:

{ <field>: <value> }

例子:

查询集合test所有的文档:

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

下面我们查询年龄=20的成员:

db.test.find({"age": { $eq: 20 }});

此查询等效于:

db.test.find({"age": 20});

这两个查询的结果一致,如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }

1.2 不相等($ne)

语法:{ <field>: { $ne: <value> } }

例子:

下面我们查询年龄!=20的成员:

db.test.find({"age": { $ne: 20 }});

查询的结果如下:

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

1.3 大于($gt)

语法:{ <field>: { $gt: <value> } }

例子:

下面我们查询年龄>22的成员:

db.test.find({"age": { $gt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.4 大于等于($gte)

语法:{ <field>: { $gte: <value> } }

例子:

下面我们查询年龄>=22的成员:

db.test.find({"age": { $gte: 22 }});

查询的结果如下:

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

1.5 小于($lt)

语法:{ <field>: { $lt: <value> } }

例子:

下面我们查询年龄<22的成员:

db.test.find({"age": { $lt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }

1.6 小于等于($lte)

语法:{ <field>: { $lte: <value> } }

例子:

下面我们查询年龄<=22的成员:

db.test.find({"age": { $lte: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

1.7 与数组中的任一值匹配($in)

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

例子:

下面我们查询年龄等于20或者22的成员:

db.test.find({"age": { $in: [ 20, 22 ] }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

1.8 与数组中的值均不匹配($nin)

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

例子:

下面我们查询年龄不等于20,22的成员:

db.test.find({"age": { $nin: [ 20, 22 ] }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2、逻辑筛选

2.1 并且($and)

语法:{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

查询满足所有表达式的文档。

例子:

下面我们查询年龄大于21并且小于24的成员:

db.test.find(
    { 
        $and: [ 
            {"age": {$lt: 24}}, 
            {"age": {$gt: 21}} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

2.2 或者($or)

语法:{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

查询至少满足一个表达式的文档

例子:

下面我们查询年龄小于21或者大于24的成员:

db.test.find(
    { 
        $or: [ 
            {"age": {$gt: 24}}, 
            {"age": {$lt: 21}} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2.3 非($not)

语法:{ <field>: { $not: { <operator-expression> } } }

查询不满足表达式的文档

例子:

下面我们查询年龄不等于22的成员:

db.test.find({ "age": { $not: { $eq: 22 }} });

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2.4 或非($nor)

语法:{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }

查询不满足所有表达式的文档

例子:

下面我们查询“年龄不等于22并且姓名不等于张三”的成员:

db.test.find(
    { 
        $nor: [ 
            {"age": {$eq: 22}}, 
            {"name": "张三"} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }


http://www.kler.cn/a/7442.html

相关文章:

  • 酒店行业数据仓库
  • L11.【LeetCode笔记】有效的括号
  • 本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程
  • Android Studio 控制台输出的中文显示乱码
  • eBPF on Go
  • MongoDB自定义顺序排序
  • 浅谈JVM(五):虚拟机栈帧结构
  • go语言for的三种形式
  • CF1748E Yet Another Array Counting Problem
  • 关于CH32F203程序下载方式说明
  • Linux VIM编辑器常用指令
  • ffmpeg关于视频前几秒黑屏的问题解决
  • 多线程的锁策略
  • Python 自动化指南(繁琐工作自动化)第二版:八、输入验证
  • 中间表示- 三地址码
  • 从零开始实现一个C++高性能服务器框架----环境变量模块
  • 2 新建工程步骤
  • 045:cesium加载OpenStreetMap地图
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版
  • 详解如何使用Nginx搭建文件服务器及实现文件服务
  • 询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)
  • 什么是服务架构?微服务架构的优势又是什么?
  • 聚会Party
  • 剪枝与重参第四课:NVIDIA的2:4剪枝方案
  • 做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
  • 4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀