MongoDB 查询操作的实例详解
使用find或findOne进行查询。并可以进行范围查询、数据集查询、不等式查询,以及其他的一些查询。
查询将会返回DBcursor 游标只有在你需要的时候返回文档
针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序。
1.指定需要返回的键
有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值
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” }
可以这样:
mongos> db.blog.find({},{“name”:1,”_id”:0}) { “name” : “zmkzmkzmkzmkzmk” } { “name” : “zmkzmkzmkzmkzmk” } { “name” : “zmkzmkzmkzmkzmk” } { “name” : “zmk” }
指定返回的键值,是查询结果更高效。此接口可用于条件查询,方便结果处理。
2.查询条件
比较操作符
"$lt"、"$lte"、“$gt”,“$gte” 分别对应 <,<=,>,>=。
小贴士:在mongodb shell中定义方法的大概格式:
mongos> var insertName=function(){ … for(var i=0;i<10;i++){ … db.blog.insert({“_id”:1,”name”:”zmk”+i}) … } … } mongos> insertName()
效果:
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”<来查询文件插入的时间
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
应用于多个元素匹配数组,且并无顺序。
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语法指定下标
mongos> db.blog.find({“fruit.2”:”peach”}) { “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
2.$size
查询特定长度的数组。
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
可以返回某个键匹配的数组元素的一个子集
mongos> db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}}) { “_id” : 2, “fruit” : [ “kumquat”, “orange” ] } { “_id” : 3, “fruit” : [ “banana”, “apple” ] }
4.查询内嵌文档
点语法即可
mongos>db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})
要正确的指定一组元素,而不必指定每个键,则需要使用$elemMatch 用来在查询条件中不非指定匹配数组中的单个内嵌文档。
db.blog.find({“comments”:{“$elemMatch”: {“author”:”joe”,”score”:{“$gte”:5}}}})
5.limit、skip和sort
三个方法可以组合进行分页.
比如你有一个在线商店,有人搜索mp3,若想每页返回50个结果,而且按照价格从高到低升序排列。
db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1}) db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1}) ……
然而略过太多会导致性能问题。
解决方法:尽量避免使用skip略过大量结果。
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()即可。
感谢阅读,如有疑问请留言或者到本站社区交流讨论,谢谢大家对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]