美文网首页mongodb基础
MongoDB 3.4 学习笔记 (四):构建查询

MongoDB 3.4 学习笔记 (四):构建查询

作者: wlszouc | 来源:发表于2017-06-11 11:44 被阅读26次

    1.1. 查询基础

    1.1.1. findOne & find 查询

    如果想得到单一文件,则当文件存在时 findOne 方法会返回文件。如果需要返回多个文件,则使用 find 方法会返回一个迭代指针对象,同时需要在程序的调用处对指针对象进行迭代。

    product = db.products.findOne({'slug': 'wheel-barrow-9092'})
    db.reviews.find({'product_id': product['_id']})
    

    1.1.2. 各种查询选项

    如果需要对评论进行分页,可以链式查询选项:

    db.reviews.find({'product_id': product['_id']}).skip(0).limit(12)
    

    根据点赞数排序:

    db.reviews.find({'product_id': product['_id']}).
                       sort({'helpful_votes': -1}).
                       limit(12)
    

    综合查询选项可轻松获得按照点赞数排序的任意页:

    page_number = 1
    product  = db.products.findOne({'slug': 'wheel-barrow-9092'})
    reviews_count = db.reviews.count({'product_id': product['_id']})
    reviews = db.reviews.find({'product_id': product['_id']}).
                               skip((page_number - 1) * 12).
                               limit(12).
                               sort({'helpful_votes': -1})
    

    1.2. MongoDB 的查询语言

    1.2.1. 查询选择器

    查询条件是由一个或多个查询选择器构成,为此 MongoDB 提供了各种运算符用以构成合适的选择器。

    • 范围运算符
    运算符 功能
    $lt 小于
    $gt 大于
    $lte 小于等于
    $gte 大于等于
    > db.users.find( { 'birth_year': { '$gte': 1985, '$lte': 2016 } } )
    
    • 集合运算符
    运算符 功能
    $all 匹配所有的数组元素
    $in 匹配任意数组元素
    $nin 不匹配所有的数组元素
    > db.products.find({'tags': {'$all': ["gift", "garden"]}})
    
    • 逻辑运算符
    运算符 功能
    $or
    $and
    $not
    $nor 异或
    $ne 不相等
    $exists 字段(键)是否存在 (Boolean)
    > db.users.find( { 'age': { '$not': { 'lte': 30 } } } )
    
    • 数组运算符
    运算符 功能
    $elemMatch 在同一个子文档中进行匹配
    $size 子文档的数目
    > db.users.find({
        'addresses': {
          '$elemMatch': {
            'name': 'home', 
            'state': 'NY'
          }
        }
      })
    
    • 其他运算符
    运算符 功能
    $mod 除法匹配
    $type 判断字段(键)的类型
    > db.orders.find({subtotal: {$mod: [3, 0]}})
    

    1.2.2. 查询选项

    可以通过不同的查询选项对查询结果进一步的筛选,MongoDB 中提供了多种查询选项:

    • 投影

      选项 $slice: 返回文档的子集。

      > db.products.find({}, {'reviews': {$slice: [24, 12]}})
      
    • 排序

      在 MongoDB 查询过程中,可以针对一个或多个字段的升降序实现对查询结果的排序。

      > db.reviews.find({}).sort({'helpful_votes':-1, 'rating': -1})  
      
    • 略过和限制

      在使用 skip 方法时,注意查询的性能,以下是一个反例:

      > db.docs.find({}).skip(500000).limit(10).sort({date: -1}) // 扫描的文档数大于等于略过值
      

    相关文章

      网友评论

        本文标题:MongoDB 3.4 学习笔记 (四):构建查询

        本文链接:https://www.haomeiwen.com/subject/xhjhqxtx.html