服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB 查询操作的实例详解

MongoDB 查询操作的实例详解

2020-05-15 16:28lqh MongoDB

这篇文章主要介绍了MongoDB 查询操作的实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

MongoDB 查询操作的实例详解

使用find或findOne进行查询。并可以进行范围查询、数据集查询、不等式查询,以及其他的一些查询。
查询将会返回DBcursor 游标只有在你需要的时候返回文档

针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序。

1.指定需要返回的键

有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值

?
1
2
3
4
5
6
7
8
mongos> db.blog.find({},{“name”:1})
{ “_id” : ObjectId(“5659836e73c8340448fa470e”) }
{ “_id” : ObjectId(“565e5c0e73c8340448fa470f”) }
{ “_id” : ObjectId(“565f998e73c8340448fa4710”) }
{ “_id” : 1, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : 2, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : 3, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : ObjectId(“566004d173c8340448fa4712”), “name” : “zmk” }

可以这样:

?
1
2
3
4
5
mongos> db.blog.find({},{“name”:1,”_id”:0})
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmk” }

指定返回的键值,是查询结果更高效。此接口可用于条件查询,方便结果处理。

2.查询条件

比较操作符

?
1
"$lt""$lte"、“$gt”,“$gte” 分别对应 <,<=,>,>=。

小贴士:在mongodb shell中定义方法的大概格式:

?
1
2
3
4
5
6
mongos> var insertName=function(){
for(var i=0;i<10;i++){
… db.blog.insert({“_id”:1,”name”:”zmk”+i})
… }
… }
mongos> insertName()

效果:

?
1
2
3
4
5
6
7
8
9
10
11
mongos> db.blog.find()
{ “_id” : 1, “name” : “zmk0” }
{ “_id” : 0, “name” : “zmk0” }
{ “_id” : 2, “name” : “zmk2” }
{ “_id” : 3, “name” : “zmk3” }
{ “_id” : 4, “name” : “zmk4” }
{ “_id” : 5, “name” : “zmk5” }
{ “_id” : 6, “name” : “zmk6” }
{ “_id” : 7, “name” : “zmk7” }
{ “_id” : 8, “name” : “zmk8” }
{ “_id” : 9, “name” : “zmk9” }

观察下面的效果,find可以使用“$lt”<来查询文件插入的时间

?
1
2
3
4
mongos> db.blog.insert({“_id”:10,”time”:new Date()})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.find({“time”:{“$lt”:new Date()}})
{ “_id” : 10, “time” : ISODate(“2015-12-05T12:08:53.469Z”) }

3.查询数组

1.$all

应用于多个元素匹配数组,且并无顺序。

?
1
2
3
4
5
6
7
8
9
mongos> db.blog.insert({“_id”:1,”fruit”:[“apple”,”banana”,”peach”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.insert({“_id”:2,”fruit”:[“apple”,”kumquat”,”orange”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.insert({“_id”:3,”fruit”:[“cherry”,”banana”,”apple”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.find({“fruit”:{$all:[“apple”,”banana”]}})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
{ “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }

对数组进行精确匹配,可以使用key.index语法指定下标

?
1
2
mongos> db.blog.find({“fruit.2”:”peach”})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }

2.$size

查询特定长度的数组。

?
1
2
3
4
mongos> db.blog.find({“fruit”:{$size:3}})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
{ “_id” : 2, “fruit” : [ “apple”, “kumquat”, “orange” ] }
{ “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }

可以再存有数组的文档中添加size键,每一次向指定数组中添加元素,同时增加“size”的值,自增操作非常快,对性能不影响。

3.slice

可以返回某个键匹配的数组元素的一个子集

?
1
2
3
mongos> db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}})
{ “_id” : 2, “fruit” : [ “kumquat”, “orange” ] }
{ “_id” : 3, “fruit” : [ “banana”, “apple” ] }

4.查询内嵌文档

点语法即可

?
1
mongos>db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})

要正确的指定一组元素,而不必指定每个键,则需要使用$elemMatch 用来在查询条件中不非指定匹配数组中的单个内嵌文档。

?
1
2
3
db.blog.find({“comments”:{“$elemMatch”:
 
{“author”:”joe”,”score”:{“$gte”:5}}}})

5.limit、skip和sort

三个方法可以组合进行分页.

比如你有一个在线商店,有人搜索mp3,若想每页返回50个结果,而且按照价格从高到低升序排列。

?
1
2
3
db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1})
……

然而略过太多会导致性能问题。

解决方法:尽量避免使用skip略过大量结果。

?
1
2
3
4
5
6
7
8
var page1=db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
var lastest=null;//解决方法,将游标最后一个文档记录下来,成为第二次查询的条件的一部分
while(page1.hasNext()){
lastest=page1.next();
display(lastest);
}
var page2=db.stock.find({“des”:”mp3”},{“price”:{$gt:lastest.price}}).limit(50).sort({“price”:-1})
……

随机选取文档

正确方法是在插入文档时插入一个随机值的键,然后按照普通查询进行find()即可。

 感谢阅读,如有疑问请留言或者到本站社区交流讨论,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/qq_18149897/article/details/50338965

延伸 · 阅读

精彩推荐
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25