Mongo DB 数据库常用命令

本文深入探讨了MySQL与MongoDB在数据库、表/集合、字段/域、记录/文档、索引等核心概念上的差异,并详细介绍了在MongoDB下进行数据库操作、数据备份与恢复的方法,包括如何在终端下执行mongostat、mongotop等监控命令,以及创建、删除数据库和集合,插入、查询、更新与删除文档等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**概念对比
------------------------------------
|mysql | 和 | mongodb   |  概念比较  |
------------------------------------
|mysql    |  mongodb    |  含义     |
------------------------------------
|database |  database   |  数据库   |
------------------------------------
|table    |  collection |  表/集合  |
------------------------------------
|column   |  field      |  字段/域  |  
------------------------------------
|row      |  document   |  记录/文档 | 
------------------------------------
|index    |  index      |  索引     | 
------------------------------------ 
终端下:

mongostat   数据库的监测命令
mongotop    监测每个数据读写时长


数据库的备份和恢复

备份   mongodump  -h  dbhost  -d   dbname  -o  dbdir
                    (主机地址)    (数据库名)  (备份后的名)   

恢复   mongorestore  -h host:port  -d  dbname  dbpath
                       地址:端口        新库名   文件路径/文件名


系统数据库
admin  : 存放用户和权限信息
local :  存放本地化数据
config : 存储分片信息

查看当前库
db 

创建数据库
use 库名

查看数据库
show dbs

查看集合
show collections
show tables

删除数据库  (首先进到库里)
db.dropDatabase() 

删除集合
db.集合名.drop()


创建一个的集合   
db.createCollection('集合名')

插入数据      * 插入键可以不加引号|如果这个集合不存在则自动创建
db.集合名.insert({"name":"Lucy", "age":18})
插入多条
db.集合名.insert([{XXX},{XXX},{XXX}])
db.表名.insertMany([{XXX},{XXX},{XXX}])/db.表名.insertOne([{XXX},{XXX},{XXX}])/
*如果插入时有原数据则覆盖*             db.表名.save([{x:'x'},{x:'x'},{x:'x'}])

获取集合对象 方法
db.getCollection("集合名")         *后可加插入*
db.getCollection("class1").insert({name:'老王', age:'36'})

查找数据
db.集合名.find()

查看集合结果
db.集合名.find([query,field])              query:条件,field:域名:1是显示/0是不显示

集合重命名
db.原名.renameCollection("新名")



删除文档一或多
remove(query,justOne)
功能 : 删除文档
参数 : query  用法同find 
        justOne  布尔值 默认为false表示删除所有符合条件的文档
                        设置为true则表示只删除一条

e.g. 删除所有不存在sex域的文档
db.class1.remove({sex:{$exists:false}})

e.g.  删除第一条性别为w的文档
db.class1.remove({sex:'w'},true)

删除集合中所有文档

e.g. 删除class1中所有文档
db.class1.remove({})






Mongo DB 查询大全
操作符 : 使用$符号注明的一个特殊字符串,表达一定的含义,比如 $lt 表示小于

比较操作符

                          $eq   等于  == 
                          $lt   小于  < 
                          $gt   大于  >
                          $lte  小于等于  <=
                          $gte  大于等于  >= 
                          $ne   不等于    !=
$eq  等于 == 
 
查找年龄等于18
db.class0.find({age:{$eq:18}},{_id:0})
db.class0.find({age:18},{_id:0})

$lt  小于  < 

查找年龄小于18的
 db.class0.find({age:{$lt:18}},{_id:0})
 db.class0.find({name:{$lt:"John"}},{_id:0})

* 在mongodb中字符串可以比较大小

$lte  小于等于  <= 

年龄小于等于18 
db.class0.find({age:{$lte:18}},{_id:0})

$gt  大于  >

查找年龄大于16 且 小于19
db.class0.find({age:{$gt:16,$lt:19}},{_id:0})

* 在mongodb中所有的{} [] 中都可以写多个条件。但根据   参数的不同表达的意思不一样

$gte 大于等于 >= 

大于等于19
db.class0.find({age:{$gte:19}},{_id:0})

$ne  不等于  !=

性别不等于‘m’的 
db.class0.find({sex:{$ne:'m'}},{_id:0})

* 使用ne查找也会找到该域不存在的文档

$in  包含

找到年龄为 [10,20,30]
 db.class0.find({age:{$in:[10,20,30]}},{_id:0})

$nin 不包含

找到年龄不是 17  18   19 的
 db.class0.find({age:{$nin:[17,18,19]}},{_id:0})


逻辑操作符

$and
1. 在 query 如果写多个条件默认即为 and 关系

   db.class0.find({age:{$lt:18},sex:'m'},{_id:0})

2. 逻辑与 $and

   年龄小于18并且 性别为男
   db.class0.find({$and:[{age:{$lt:18}},{sex:'m'}]},{_id:0})

$or  逻辑或

   年龄小于16或者年龄大于18
   db.class0.find({$or:[{age:{$lte:16}},{age:{$gt:18}}]},{_id:0})

$not  逻辑非

   查找年龄不小于18岁的
   db.class0.find({age:{$not:{$lt:18}}},{_id:0})

$nor   not  (a or b)  ===> (not a) and (not b)
 
   性别不是m且年龄不小于18
   db.class0.find({$nor:[{sex:'m'},{age:{$lt:18}}]},{_id:0})

逻辑条件混合

 (年龄大于17 并且 为男生)  或者 姓名叫 Abby
  db.class0.find({$or:[{age:{$gt:17},sex:'m'},{name:'Abby'}]},{_id:0})


 (年龄不大于18 或者为 女性) 并且 姓名 大于Lucy
  db.class0.find({$or:[{age:{$not:{$gt:18}}},{sex:'w'}],name:{$gt:'Lucy'}},{_id:0})

Array  (数组)
[1,2,3,4]

* 数组是有序的数据集合
* mongo中数组也可以有多重数据元素混合

查找数组中包含某一条件的元素

只要score数组中包含小于60的元素即可查询过滤
db.class1.find({score:{$lt:60}},{_id:0})

$all
查找数组同时包含多项的文档

查找同时包含49  67的文档
db.class1.find({score:{$all:[49,67]}},{_id:0})

$size
通过数组元素个数查找 
          *** 
查找score中包含两个元素的文档
 db.class1.find({score:{$size:2}},{_id:0})

$slice
显示数组中指定项
****
显示数组前两项
 db.class1.find({},{_id:0,score:{$slice:2}})

显示数组索引下表1到2
  db.class1.find({},{_id:0,score:{$slice:[1,2]}})


其他常用查找操作符

$exists
查找域名是否存在(true表示存在false表示不存在)

查找不存在sex域的文档
db.class1.find({sex:{$exists:false}},{_id:0})

$mod 
余数查找

找出年龄为单数的文档       除2余数等于1
db.class1.find({age:{$mod:[2,1]}},{_id:0})

$type
找出指定数据类型的文档

查找name域值类型为2的文档
db.class1.find({name:{$type:2}},{_id:0})



查找结果的操作函数(去重)

db.collection.distinct(filed)
功能: 查看某个域的值范围
获取某个域的值,去重
 db.class0.distinct('age')

pretty()
功能:格式化显示查询结果(一团一条信息显示)
db.class0.find().pretty()

limit(n)
功能:显示前n条结果

显示查询结果前三条
db.class0.find({},{_id:0}).limit(3)

skip(n)
功能: 跳过前n条显示后面的查询结构
跳过前5条文档,显示后面的查询结果
db.class0.find({},{_id:0}).skip(5)

count()
功能 : 统计查询结果数量
* 在统计数量时要给出一定query条件

统计性别为w的文档个数
db.class0.find({sex:'w'},{_id:0}).count()

sort({field: 1/-1})
功能: 查找结果排序
参数: 以键值对表示按照哪个field排序
       1 表示升序,-1表示降序

查找结果按照降序排序
db.class0.find({},{_id:0}).sort({age:-1})

复合排序

按照年龄升序排序,年龄相同时按照姓名降序
 db.class0.find({},{_id:0}).sort({age:1,name:-1})

函数的连续调用
db.class0.find({},{_id:0}).sort({age:1}).limit(3)

操作符用法文档查找
www.mongodb.com ---> docs ---->search
在这里插入代码片
bson  ---》json -----》 JavaScript

值类型             数值

整型               整数  1 2 3 -1 -3
布尔类型            true   false
浮点型              小数 1.234
Array              数组 [1, 2, 3]
Timestamp          时间戳
Date               时间日期
Object             内部文档
Null               null 空值 
String             字符串
Symbol             特殊字符串
Binary data        二进制字符串
code               代码
regex              正则表达式
ObjectId           ObjectId对象(自动生成ID标记)

ObjectId      自动生成ID标记

"_id" : ObjectId("5b764646d4ff0ad8f415f977")

_id : 如果在插入文档时没有指定_id域, 则系统会自动添加该域作为主键。值则是一个ObjectId类型数据
_id : 当 mongodb 插入文档时如果不指定_id域则自动生成)id域. 值如果不是自己指定即会自动生成一个ObjectId值

24 位 16进制数 使用ObjectId经过算法处理保证其唯一性(保证所有的_id值的唯一性)

前8位的 文档创建时间    6位  机器ID  4位 进程id   后6位计数器



Type            Number        Alias   Notes
Double              1         “double”     
String              2         “string”     
Object              3         “object”     
Array               4         “array”      
Binary data         5         “binData”    
Undefined           6         “undefined”     Deprecated.
ObjectId            7         “objectId”   
Boolean             8         “bool”   
Date                9         “date”   
Null                10        “null”   
Regular Expression  11        “regex”      
DBPointer           12        “dbPointer”     Deprecated.
JavaScript          13        “javascript”     
Symbol              14        “symbol”         Deprecated.
JavaScript(with scope) 15      “javascriptWithScope”    
32-bit integer      16        “int”    
Timestamp           17        “timestamp”      
64-bit integer      18        “long”   
Decimal128          19        “decimal”        New in version 3.4.
Min key             -1        “minKey”     
Max key             127       “maxKey”     


查找所有内容
db.collection.find() ----> select * from  table

find(query,field)
功能 : 查找文档
参数 : query  查找条件,相当于where子句
        field  查找的域
返回值 : 查找到的所有文档


query : 以键值对方式传递参数,如果是空{}表示查找所有内容

  e.g.  查找所有性别为w的文档  
        db.class0.find({sex:'w'})

field : 以键值对的方式给出要查找(不查找)的域
         以域名为键,以0,1为值分别表示不查找和查找

* 如果某一个或多个域设置为0 表示这些域不查找,其他域均查找
* 如果某一个或多个域设置为1 表示这些域查找,其他域均不查找
* _id 除非设置为0 否则均会查找
* 除_id域其他域不能有的设置1有的设置0**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值