mongodb-语法使用

一、 MongoDB 查询语法

db.collection.find(query, projection)

query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

AND 条件

db.collection.find({key1:value1, key2:value2})

OR条件

db.collection.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
)

AND 和 OR 联合使用

db.collection.find({key1:value1,$or: [
         {key2: value2}, {key3:value3}
      ]})
1、查询指定字段返回

_id为默认返回的字段,不让_id返回,则标记为0,需要返回的字段标记为1,如下:

db.up_user.find({"userId":860},{"nickname":1,"role":1,"_id":0})
2、数组条件Query
操作符含义
$in包含其一
$nin不包含任何之一
$all全部匹配,但不求顺序
$ne不等于
db.up_user.find({"userId":{$in:[860,1391]}},{"userId":1,"nickname":1,"role":1,"_id":0})
3、区间条件Query
db.up_user.find({"userId": {"$gte" :1380, "$lte" :1391}},{"userId":1,"nickname":1,"role":1,"_id":0})

日期:
reconstructed_date: {$lte: {ISODate("2013-09-25T13:37:00.000Z")}, $gte: {ISODate("2013-10-15T14:56:00.000Z")}}

4、判断元素是否存在 $exists
db.up_user.find({"orderList":{$exists :true}},{"userId":1,"nickname":1,"role":1,"orderList":1,"_id":0})
5、在嵌套字段上查询

如果需要在嵌套的字段上查询,使用点 .来连接。

db.up_user.find({"orderList.userid":7252},{"userId":1,"nickname":1,"role":1,"orderList":1,"_id":0})

二、 MongoDB 其他操作

t y p e 、 type、 typegroup、$size

命令/方法含义
remove
limit读取指定数量的数据记录
skip跳过指定数量的数
sort指定排序的字段,并使用 1 和 -1 来指定排序的方式
createIndex创建索引
aggregate处理数据(诸如统计平均值,求和等),并返回计算后的数据结果
count查询结果总数

三、 MongoDB 聚合

db.sales.aggregate([
   // 第一个阶段(筛选)
  {
    $match : {}
  },
  // 第二阶段(分组)
  {
    $group : {
    }
  },
  // 第三阶段(排序)
  {
    $sort : {  }
  }
 ])

命令/方法含义
$match用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$group按指定的_id表达式对输入文档进行分组,并针对每个不同的分组输出文档。
$project修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$limit用来限制MongoDB聚合管道返回的文档数。
$skip在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$sort将输入文档排序后输出。
$geoNear输出接近某一地理位置的有序文档。
1、$match 查询
db.up_user.aggregate([{"$match":{"userId":{"$in":[860,1391]}}}])
2、$group 分组
{
  $group:
    {
      _id: <expression>, // 分组表达式		
      <field1>: { <accumulator1> : <expression1> },
      ...
    }
 }

_id :强制必须存在。可以为 null,其余的计算字段是可选的,并使用运算符计算。

db.up_user.aggregate(
[
  {$match:{
    "userId":{$in:[860,1391]}
    }
  }
  ,
  {$group:{
      _id:"$userId",
      count:{$sum:1}
    }
  }
]
)
db.up_user.aggregate(
[
  {$match:{
    "oderList":{$exists :true},"userId":{$gt:1180,$lt:111391},"role":{$gt:0}
    # _id: { month: { $month: "$createTime" }, day: { $dayOfMonth: "$createTime" }, year: { $year: "$createTime" } }
    
    }
  }
  ,
  {$group:{
      _id:"$role",
      count:{$sum:1}
    }
  }
  ,
  {"$sort":{count:-1}}
]
)
3、$聚合函数
表达式描述实例
$sum计算总和。
$avg计算平均值
$min获取集合中所有文档对应值得最小值。
$max获取集合中所有文档对应值得最大值。
$push在结果文档中插入值到一个数组中。
$addToSet在结果文档中插入值到一个数组中,但不创建副本。
$first根据资源文档的排序获取第一个文档数据。
$last根据资源文档的排序获取最后一个文档数据

四、 MongoDB 文档操作

1、插入文档
方法说明
insert若插入的数据主键已经存在,则抛出异常
savesave():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃
insertOne向集合插入一个新文档
replaceOne
insertMany向集合插入一个多个文档
db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)
  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。
2、更新文档
方法说明
update用于更新已存在的文档
savesave():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃
replaceOne
updateOne
updateMang
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
  • query : update的查询条件。
  • update : update的对象和一些更新的操作符(如,$inc…)等
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
操作符含义
$set布局修改器,修改某一值
$inc增加数量
$mul乘以数量
$rename修改字段名
$unset删除字段
$minmin可以将给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值。
$max$max可以将给出的值与当前文档字段进行比较,当给定值较大时则修改当前文档值为给定值
$push修改器修改数组对象
$addToSet如果目标数组存在此项则不操作,不存在此项则加进去
3、删除文档
db.up_user.remove({}),
db.up_user.remove({key,value}),
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值