• 《mongoDB》查询


    一:简单查询

    • db.collection.find(query, projection)
        - query :可选,使用查询操作符指定查询条件
        - projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
    • 查询时使用 .pretty() 可以使代码格式化显示,类似于 G
    • find() 语句不加 QUERY 条件时,默认查询集合文档,默认显示20条
    • 如果只想找到一条记录,请使用 findOne()
      > db.demo.findOne({"name":"lisi"})
      {
          "_id" : ObjectId("5c6158fa2f5e0916de3c790e"),
          "name" : "lisi",
          "age" : 26
      }
    • projection 可以选择字段是否展示 1为展示/0不展示
      find()/findOne()同理
      
      > db.demo.findOne({"name":"lisi"}, {"_id":0,"name":1})
      { "name" : "lisi" }

    二:查询条件查询

    • 适用的查询条件有
      • $lt    小于
      • $lte  小于等于
      • $gt   大于
      • $gte 大于等于
    • 找到 年龄(age) 小于30 大于25的文档
      > db.demo.find({"age" : {"$lt" : 30, "$gt" : 25}})
      { "_id" : ObjectId("5c6158eb2f5e0916de3c790c"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c6158fa2f5e0916de3c790d"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c6158fa2f5e0916de3c790e"), "name" : "lisi", "age" : 26 }
      { "_id" : ObjectId("5c61590f2f5e0916de3c790f"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c61590f2f5e0916de3c7910"), "name" : "lisi", "age" : 26 }

    三:OR 查询

    • $in 可以查询一个键的多个值
    • > db.demo.find({"age" : {"$in":[20,26]}})
      { "_id" : ObjectId("5c613f942f5e0916de3c7909"), "age" : 20 }
      { "_id" : ObjectId("5c6158eb2f5e0916de3c790c"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c6158fa2f5e0916de3c790d"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c6158fa2f5e0916de3c790e"), "name" : "lisi", "age" : 26 }
      { "_id" : ObjectId("5c61590f2f5e0916de3c790f"), "name" : "zhangsan", "age" : 26 }
      { "_id" : ObjectId("5c61590f2f5e0916de3c7910"), "name" : "lisi", "age" : 26 }
    • OR 更通用,可以查询更多的条件
    • > db.demo.find({"$or" : [{"age" : 20}, {"name":"lihong"}]})
      { "_id" : ObjectId("5c613f942f5e0916de3c7909"), "age" : 20 }
      { "_id" : ObjectId("5c61587a2f5e0916de3c790b"), "name" : "lihong", "age" : 25 }

    四:null 查询

    • null 的匹配是有些奇怪,不仅仅会匹配某个键为null的文档,还会匹配不包含这个键的文档
    • > db.demo.find({"age" : null})
      { "_id" : ObjectId("5c61011d0a485d689a5f3e15"), "c" : "d" }
      { "_id" : ObjectId("5c6147c92f5e0916de3c790a"), "age" : null }
    • 如果只是想匹配 null 的存在,还需要 使用 exists 来判断键值是否存在
    • db.demo.find({"age" : {"$in" : [null], "$exists" : true}})
      { "_id" : ObjectId("5c6147c92f5e0916de3c790a"), "age" : null }

    五:数组

    • 数组的查询和标量的查询类似
      • 插入
        > db.demo.insert({"fruit" : ["banana", "apple", "origin"]});
        WriteResult({ "nInserted" : 1 })
      • 查询
        > db.demo.find({"fruit" : "apple"})
        { "_id" : ObjectId("5c6259632f5e0916de3c7912"), "fruit" : [ "banana", "apple", "origin" ] }
    • 匹配多个元素的数组
      • > db.demo.find({"fruit" : {$all :["banana", "apple"]}});
        { "_id" : ObjectId("5c6259632f5e0916de3c7912"), "fruit" : [ "banana", "apple", "origin" ] }
        { "_id" : ObjectId("5c6259de2f5e0916de3c7913"), "fruit" : [ "banana", "apple" ] }
    • 根据数组长度匹配
      • > db.demo.find({"fruit" : {$size : 3}});
        { "_id" : ObjectId("5c6259632f5e0916de3c7912"), "fruit" : [ "banana", "apple", "origin" ] }

    六:查询内嵌文档

    七:$where 查询

    • 避免使用,英文在查询时需要把文档从 BSON 转为 Javascript 对象操作

    八:limit/skip/sort

    • limit
      • limit 指定为上限
      • db.demo.find().limit(3);
    • skip
      • 跳过前 n 个匹配的文档
      • 一次略过过多会导致性能问题,用排序或者其他方法解决
      • db.demo.find().skip(3);
    • sort
      • 接受一对键值对作为排序,1升序/-1降序,如果指定多个键,则按照顺序进行排序
      • > db.demo.find().sort({"age": -1, "name":1});
        { "_id" : ObjectId("5c6158fa2f5e0916de3c790e"), "name" : "lisi", "age" : 26 }
        { "_id" : ObjectId("5c61587a2f5e0916de3c790b"), "name" : "lihong", "age" : 25 }
        { "_id" : ObjectId("5c613f942f5e0916de3c7909"), "age" : 20 }
      • 对于混合数据的比较,由大到小

  • 相关阅读:
    HDU 5033 Building --离线+单调栈
    HDU 5025 Saving Tang Monk --BFS
    Codeforces Round #267 Div.2 D Fedor and Essay -- 强连通 DFS
    Codeforces Round #267 Div2 C George and Job --DP
    POJ 3150 Cellular Automaton --矩阵快速幂及优化
    TopCoder SRM 633 Div.2 500 Jumping
    HDU 4998 Rotate --几何
    一些语言方面的技巧
    HDU 5017 Ellipsoid 模拟退火第一题
    HDU 5015 233 Matrix --矩阵快速幂
  • 原文地址:https://www.cnblogs.com/25-lH/p/10364781.html
Copyright © 2020-2023  润新知