大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
06-MongoDB 查询文档
MongoDB
2024-04-17 09:59:39
13
0
0
bigdata
MongoDB
# MongoDB 查询文档 MongoDB 查询文档使用 find() 方法。 find() 方法以非结构化的方式来显示所有文档。 ## 语法 MongoDB 查询数据的语法格式如下: ``` db.collection.find(query, projection) ``` * **query** :可选,使用查询操作符指定查询条件 * **projection** :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。 如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下: ``` >db.col.find().pretty() ``` pretty() 方法以格式化的方式来显示所有文档。 ## 实例 以下实例我们查询了集合 col 中的数据: ``` > db.col.find().pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } ``` 除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。 ## MongoDB 与 RDBMS Where 语句比较 如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询: <table><thead><tr><th>操作</th><th>格式</th><th>范例</th><th>RDBMS 中的类似语句</th></tr></thead><tbody><tr><td>等于</td><td><code>{<key>:<value></code>}</td><td><code>db.col.find({"by":"菜鸟教程"}).pretty()</code></td><td><code>where by = '菜鸟教程'</code></td></tr><tr><td>小于</td><td><code>{<key>:{$lt:<value>}}</code></td><td><code>db.col.find({"likes":{$lt:50}}).pretty()</code></td><td><code>where likes < 50</code></td></tr><tr><td>小于或等于</td><td><code>{<key>:{$lte:<value>}}</code></td><td><code>db.col.find({"likes":{$lte:50}}).pretty()</code></td><td><code>where likes <= 50</code></td></tr><tr><td>大于</td><td><code>{<key>:{$gt:<value>}}</code></td><td><code>db.col.find({"likes":{$gt:50}}).pretty()</code></td><td><code>where likes > 50</code></td></tr><tr><td>大于或等于</td><td><code>{<key>:{$gte:<value>}}</code></td><td><code>db.col.find({"likes":{$gte:50}}).pretty()</code></td><td><code>where likes >= 50</code></td></tr><tr><td>不等于</td><td><code>{<key>:{$ne:<value>}}</code></td><td><code>db.col.find({"likes":{$ne:50}}).pretty()</code></td><td><code>where likes != 50</code></td></tr></tbody></table> ## MongoDB AND 条件 MongoDB 的 find() 方法可以传入多个键 (key),每个键(key) 以逗号隔开,即常规 SQL 的 AND 条件。 语法格式如下: ``` >db.col.find({key1:value1, key2:value2}).pretty() ``` ## 实例 以下实例通过 **by** 和 **title** 键来查询 **菜鸟教程** 中 **MongoDB 教程** 的数据 ``` > db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } ``` 以上实例中类似于 WHERE 语句:**WHERE by='菜鸟教程' AND title='MongoDB 教程'** ## MongoDB OR 条件 MongoDB OR 条件语句使用了关键字 **$or**, 语法格式如下: ``` >db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty() ``` ## 实例 以下实例中,我们演示了查询键 **by** 值为 菜鸟教程 或键 **title** 值为 **MongoDB 教程** 的文档。 ``` >db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } > ``` ## AND 和 OR 联合使用 以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: **'where likes>50 AND (by ='菜鸟教程'OR title ='MongoDB 教程')'** ``` >db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } ``` # MongoDB 条件操作符 > 条件操作符用于比较两个表达式并从 mongoDB 集合中获取数据。 在本章节中,我们将讨论如何在 MongoDB 中使用条件操作符。 MongoDB 中条件操作符有: * (>) 大于 - $gt * (<) 小于 - $lt * (>=) 大于等于 - $gte * (<=) 小于等于 - $lte **我们使用的数据库名称为 "runoob" 我们的集合名称为 "col",以下为我们插入的数据。** 为了方便测试,我们可以先使用以下命令清空集合 "col" 的数据: ``` db.col.remove({}) ``` 插入以下数据 ``` >db.col.insert({ title: 'PHP 教程', description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['php'], likes: 200 }) ``` ``` >db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['java'], likes: 150 }) ``` ``` >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb'], likes: 100 }) ``` 使用 find() 命令查看数据: ``` > db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } ``` 如果你想获取 "col" 集合中 "likes" 大于 100 的数据,你可以使用以下命令: ``` db.col.find({likes : {$gt : 100}}) ``` 类似于 SQL 语句: ``` Select * from col where likes > 100; ``` 输出结果: ``` > db.col.find({likes : {$gt : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } > ``` 如果你想获取 "col" 集合中 "likes" 大于等于 100 的数据,你可以使用以下命令: ``` db.col.find({likes : {$gte : 100}}) ``` 类似于 SQL 语句: ``` Select * from col where likes >=100; ``` 输出结果: ``` > db.col.find({likes : {$gte : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } > ``` 如果你想获取 "col" 集合中 "likes" 小于 150 的数据,你可以使用以下命令: ``` db.col.find({likes : {$lt : 150}}) ``` 类似于 SQL 语句: ``` Select * from col where likes < 150; ``` 输出结果: ``` > db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } ``` 如果你想获取 "col" 集合中 "likes" 小于等于 150 的数据,你可以使用以下命令: ``` db.col.find({likes : {$lte : 150}}) ``` 类似于 SQL 语句: ``` Select * from col where likes <= 150; ``` 输出结果: ``` > db.col.find({likes : {$lte : 150}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } ``` 如果你想获取 "col" 集合中 "likes" 大于 100,小于 200 的数据,你可以使用以下命令: ``` db.col.find({likes : {$lt :200, $gt : 100}}) ``` 类似于 SQL 语句: ``` Select * from col where likes>100 AND likes<200; ``` 输出结果: ``` > db.col.find({likes : {$lt :200, $gt : 100}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } > ``` # MongoDB Limit 与 Skip 方法 MongoDB Limit() 方法 如果你需要在 MongoDB 中读取指定数量的数据记录,可以使用 MongoDB 的 Limit 方法,limit() 方法接受一个数字参数,该参数指定从 MongoDB 中读取的记录条数。 ## 语法 limit() 方法基本语法如下所示: ``` >db.COLLECTION_NAME.find().limit(NUMBER) ``` ## 实例 集合 col 中的数据如下: ``` { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } ``` 以下实例为显示查询文档中的两条记录: ``` > db.col.find({},{"title":1,_id:0}).limit(2) { "title" : "PHP 教程" } { "title" : "Java 教程" } > ``` 注:如果你们没有指定 limit() 方法中的参数则显示集合中的所有数据。 ## MongoDB Skip() 方法 我们除了可以使用 limit() 方法来读取指定数量的数据外,还可以使用 skip() 方法来跳过指定数量的数据,skip 方法同样接受一个数字参数作为跳过的记录条数。 ## 语法 skip() 方法脚本语法格式如下: ``` >db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) ``` ## 实例 以下实例只会显示第二条文档数据 ``` >db.col.find({},{"title":1,_id:0}).limit(1).skip(1) { "title" : "Java 教程" } > ``` **注:**skip() 方法默认参数为 0 。 # MongoDB 排序 MongoDB sort() 方法 在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。 在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。 ## 语法 sort() 方法基本语法如下所示: ``` >db.COLLECTION_NAME.find().sort({KEY:1}) ``` ## 实例 col 集合中的数据如下: ``` { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } ``` 以下实例演示了 col 集合中的数据按字段 likes 的降序排列: ``` >db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) { "title" : "PHP 教程" } { "title" : "Java 教程" } { "title" : "MongoDB 教程" } > ```
上一篇:
06-Kafka消费者组示例
下一篇:
06-Neo4j-CREATE-MATCH-RETURN命令
文档导航