十分钟捋完 mongodb 命令

常用mongo指令

本章介绍的mongo指令,主要是开发人员用的。

显示 用户、库、集合

help
show users
show dbs
show collections 、show tables #两种等价

库相关:增删查

db #查看当前
use ${db_name}  #使用库,没有则新增
db.dropDatabase() #删除当前库

集合相关:增删

### 创建集合:capped表示固定大小,超过大小size或数量max,数据会覆盖
db.createCollection("students", {
    
    size: 20, capped: false, max: 100});
db.${collection_name}.drop()    #删除集合

记录(文档)相关

增删改查

db.${collection_name}.insert({
    
    id:100,orderId:1000,ordername:"ordername",items:["01","02","03"]})
## 参数分别是查询条件、删除选项(只删除一条、异常级别)
db.${collection_name}.remove({
    
    id:100},{
    
    justOne:2,writeConcern:{
    
    }})
## 参数分别是查询条件、更改字段、更改选项(不存在就插入[默认false]、更新全部[false]、异常级别)
db.${collection_name}.update({
    
    id:100},{
    
    $set:{
    
    orderId:999}},{
    
    upsert:true,multi:true,writeConcern:{
    
    }})
## 也可以根据"_id" : ObjectId("5e5e9b7405555d2a30027967"),直接通过save来更新整条数据
db.${collection_name}.save({
    
    _id:ObjectId("5e5e9b7405555d2a30027967"),id:102,orderId:1002,ordername:"ordername2",items:["01","02"],maps:[{
    
    k1:21,k2:22},{
    
    k1:23,k2:24}],issave:true})

db.${collection_name}.find().pretty()

查询条件

下面是查询条件的复杂一点的应用。

常用逻辑符号

  • $or :或者
  • $gt :大于 greater than
  • $gte :大于等于 greater than equal
  • $lt :小于 less than
  • $lte :小于等于less than equal
  • $ne:不等于 not equal
##举例:
db.students.insert([{
    
    id:101,orderId:1001,ordername:"ordername1",items:["01"],maps:[{
    
    k1:11,k2:12},{
    
    k1:13,k2:14}]}
,{
    
    id:102,orderId:1002,ordername:"ordername2",items:["01","02"],maps:[{
    
    k1:21,k2:22},{
    
    k1:23,k2:24}]}
,{
    
    id:103,orderId:1003,ordername:"ordername3",items:["01","02","03"],maps:[{
    
    k1:31,k2:32},{
    
    k1:33,k2:34}]}
,{
    
    id:104,orderId:1004,ordername:"ordername4",items:["01","02","03","04"],maps:[{
    
    k1:41,k2:42},{
    
    k1:43,k2:44}]}
,{
    
    id:105,orderId:1005,ordername:"ordername5",items:["01","02","03","04","05"],maps:[{
    
    k1:21,k2:32},{
    
    k1:43,k2:15}]}])
### 猜猜结果是什么
db.students.find( {
    
    
      orderId:{
    
    $gt:1000,$lte:1004},
      $or:[
         {
    
    orderId:{
    
    $gt:1003}},
         {
    
    orderId:{
    
    $lte:1002}}
      ]
} ).pretty()

按数组查询

  • $all:包含全部元素
  • $in:包含一个
  • $size:数组大小等于
## 包含01 和04的文档
db.students.find( {
    
     items:{
    
    $all :["01","04"],$size:4 }} ).pretty()
## 包含03 或09的文档
db.students.find( {
    
     items:{
    
    $in :["03","09"]}} ).pretty()

返回数组元素

  • $slice:返回数组中哪些元素,param1=from,param2=count
#从第0位开始3个元素,即元素04,05不显示
db.students.find( {
    
     },{
    
    items:{
    
    $slice:[0,3]}} ).pretty()  

按数组对象查询

  • $elemMatch:直接取数组内对象的属性进行判断。
#必须maps中同一个对象的两个属性为满足条件
db.students.find({
    
    maps:{
    
    $elemMatch:{
    
    k1:21,k2:32}}}).pretty();
#可以maps中多个对象的属性分别满足条件
db.students.find({
    
    "maps.k1":21,"maps.k2":24}).pretty();

返回行数、排序

  • skip:跳过n行
  • limit:只返回n行
  • sort:排序,效果在skip和limit之前
# 排序,跳过一行,输出两行;记住排序在skip limit之前生效。
db.students.find().sort({
    
    orderId:1}).skip(1).limit(2);

分组

  • aggregate:使用$group参数,指定分组字段,合计字段
db.students.aggregate([{
    
    $group:{
    
    _id:"$issave",cnt:{
    
    $sum:1}}}]);

索引

mongodb的index结构是一种BTree,每个leaf上存放了IndexKey和doc的地址。
mongodb不存在clustered index,因为:

  • abc三个物理上相邻的节点,如果b变大,就无法在原来的位置存放,只能移到其他地址,从而改变abc的物理顺序。
## 创建索引
db.${collection_name}.ensureIndex({
    
    orderId:1,orderName:-1});
## 重建索引
db.${collection_name}.reIndex({
    
    orderId:-1})
## 查看索引
db.${collection_name}.getIndexes()
## 删除索引
db.${collection_name}.dropIndex("${index_name}")
db.${collection_name}.dropIndexes(); ##删除所有

猜你喜欢

转载自blog.csdn.net/weixin_36572983/article/details/104646019