mongodb 基本查询与高级查询 看这里就够了

5,338 阅读1分钟

基本查询

基本查询的通用方式 : db.表名.find({},{}).功能

    第一个{}  为条件查询
    第二个{}  为返回的列 {字段名:1}
    功能 : sort(字段:1) | skip(num) | limit(num) | count()

条件查询

第一个花括号

查找全部

    db.users.find()

精准查找

     db.users.find({"name":"zhangsan"})

精准查找

     db.users.find({"name":"zhangsan"})

>,>=,<,<= 查找

    大于     :  db.users.find({"name":{$gt:"q"}})
    大于等于 :  db.users.find({"name":{$gte:"q"}})
    小于     :  db.users.find({"name":{$lt:"q"}})
    小于等于 :  db.users.find({"name":{$lte:"q"}})

多个条件并且关系 查找

    db.users.find({"name":"zhangsan","age":20})       //不同key
    db.users.find({"age":{$gte:25,$lte:28}})          //相同key

多个条件或许关系 查找

    db.users.find({ $or:[{age:24},{age:28}]   })

模糊查询

    模糊查询   :  db.article.find({"title":/女装/})
    以什么开头 :  db.users.find({title:/^女装/})
第二个花括号

查询指定列

    单列 :  db.users.find({},{name:1})
    多列 :  db.users.find({age:{$gte:25}},{name:1,age:1})
功能

排序

    正序 : db.users.find({},{}).sort({age:1})
    倒序 : db.users.find({},{}).sort({age:-1})

限制

    查询前五条数据            :  db.users.find({},{}).limit(5)
    跳过两条,查询后面三条数据  :  db.users.find({}).skip(2).limit(3)
    分页方法                  :  分页  skip-1 * limit

统计

    db.users.find({ age:{$gte:24} }).count()

高级查询 aggregate

官方案列

Aggregation 管道操作符与表达式

管道操作符 Description
$project 查询字段进行筛选
$match 条件匹配。只满足条件的文档才能进入下一阶段
$limit 限制结果的数量
$skip 跳过文档的数量
$sort 条件排序
$group 条件进行分组和统计
$lookup $lookup 操作符 用以引入其它集合的数据(表关联查询)

SQL 和 和 NOSQL 对比

SQL NOSQL
SELECT $project
WHERE $match
GROUP BY $group
HAVING $project
ORDER BY $sort
LIMIT $limit
SUM() $sum
COUNT() $sum
join $lookup

每个管道表达式 看上面官方图,$group中的求和表达式。

常用表达式操作符 Description
$addToSet 将文档指定字段的值去重
$max 文档指定字段的最大值
$min BY 文档指定字段的最小值
$sum 文档指定字段求和
$multiply 文档指定两个字段求乘
$avg BY 文档指定字段求平均
$gt 大于给定值
$lt() 小于给定值
$eq() 等于给定值

聚合管道格式

    db.order.aggregate([
      {
        $project:{ trade_no:1, all_price:1 }
      },
      {
        $match:{"all_price":{$gte:90}}
      },
      {
        $limit:1
      },
      {
        $skip:1
      },
      {
        $sort:{"all_price":-1}
      },
      {
        $group :{_id:"$order_id",totalNum:{$sum:"$num"},totalPrice: { $sum: { $multiply: [ "$price", "$num" ] } }  }
      },
      {
        $lookup:
          {
            from: "order_item",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
          }
      }
    ])