• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB 查询操作的实例详解

    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;i10;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()即可。

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

    您可能感兴趣的文章:
    • MongoDB如何查询耗时记录的方法详解
    • Mongodb实现的关联表查询功能【population方法】
    • Node.js对MongoDB数据库实现模糊查询的方法
    • 在php7中MongoDB实现模糊查询的方法详解
    • MongoDB数据查询方法干货篇
    • Java操作MongoDB模糊查询和分页查询
    • MongoDB查询性能优化验证及验证
    上一篇:MongoDB开源数据库开发工具dbKoda
    下一篇:java操作mongoDB查询的实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB 查询操作的实例详解 MongoDB,查询,操作,的,实例,