mongodb_常用命令

MongoDB

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理

  • 关系型数据库
    • 遵循ACID规则
    • 高度组织化结构化数据
    • 结构化查询语言(SQL) (SQL)
    • 数据和关系都存储在单独的表中。
    • 数据操纵语言,数据定义语言
    • 严格的一致性
    • 基础事务
  • 非关系行数据库
    • 代表着不仅仅是SQL
    • 没有声明性查询语言
    • 没有预定义的模式
    • 键 - 值对存储,列存储,文档存储,图形数据库
    • 最终一致性,而非ACID属性
    • 非结构化和不可预知的数据
    • CAP定理
    • 高性能,高可用性和可伸缩性
      一个数据库中可以有多个集合(数据表),一个集合中可以有多个键值对(字段和值)

MongoDB 安装

  1. window下载mongoDB官网,按照系统选择
  2. 安装,傻瓜式默认安装,最后一步取消install MongodDB Compass(数据库可视化管理工具)
  3. 环境变量配置,将数据库安装路径bin的目录添加到=>环境变量=>用户变量=>path下
  4. $ mongo --version 显示版本号表示安装成功
  5. 路径配置,$ mongod --dbpath="C:\Program Files\MongoDB\Server\4.2\data\db" --logpath="C:\Program Files\MongoDB\Server\4.2\log\mongod.log" --install --serviceName "MongoDB"
    --dbpath表示数据库存放路径,--logpath表示日志存放路径, --install --serviceName服务名字

MongoDB 概念解析

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

MongoDB 常用命令

  1. $ mongo, 默认连接到mongodb,没有设置用户密码的时候
  2. use database_name, 如果数据库不存在,则创建数据库,否则切换到指定数据库。
> use runoob
> switched to db runoob
  1. show dbs 查看所有数据库,没有数据的数据库不会显示。db 查看当前使用的数据库
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> db
test
>
  1. db.dropDatabase(), 删除当前数据库
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>
  1. db.crateCollection(name, options),创建集合(数据表),name要创建集合的名称,options,可选参数,指定有关内存大小及索引的选项
switched to db test
> db.createCollection('runoob')
{ "ok" : 1 }
> show collections // 或者show tables命令
runoob
>
// 创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
// capped: 可选,如果为true,必须指定size参数,指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档
// autoIndexId: 可选,true自动在_id字段创建索引
// size: 可选,为固定集合指定一个最大值,以千字节计(KB)。
// max: 可选,指定固定集合中包含文档的最大数量。
> db.createCollection('mycol', {capped: true, autoIndexId: true, size: 6142800, max: 10000})
{
   // autoIndexId选项已弃用,将在以后的版本中删除
  "note" : "the autoIndexId option is deprecated and will be removed in a future release",
  "ok" : 1
}
>
// 在MongoDB中,当插入一些文档时,MongoDB会自动创建集合,不需要创建
> db.mycol2.insert({'name': 'jack'})
WriteResult({ "nInserted" : 1 })
> show collections
mycol
mycol2
runoob
>
  1. db.COLLECTION_NAME.drop(), 删除集合(数据表)
> show collections
mycol
mycol2
runoob
> db.mycol2.drop()
true
> show collections
mycol
runoob
>
  1. [INSERT], db.COLLECTION_NAME.insert(document), 插入文档
// 如果插入两次或多次同样的文档,并不会覆盖原来的文档,而是添加一条新的文档,他们的id(自动生成)不同
// 语法: db.COLLECTION_NAME.insert(document)
> db.col.insert({title: 'MongoDB', 
    description: 'MongoDB 是一个 Nosql 数据库',
    url: 'https://www.mongodb.com/',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})
WriteResult({ "nInserted" : 1 })
  1. [DELETE], db.COLLECTION_NAME.remove(document), 删除文档
// 语法
db.collection.remove({
  , //查询条件
  {
    justOne: ,  // 如果设置为true或1,则只删除一个文档,如果不设置该参数(默认为false),则删除所有匹配条件的文档
    writeConcern: , // 抛出异常的级别.
  }
})
> db.col.remove({'name': 'jack'}) // 删除col集合中所有title为jack的数据
WriteResult({ "nRemoved" : 2 }) // 我这里只有两条数据
> db.col.remove({title: 'MongoDB'}, {justOne: true}) // 只删除一条数据
WriteResult({ "nRemoved" : 1 })
>db.col.remove({}) // 删除当前集合中所有数据
>
  1. [UPDATE], db.COLLECTION_NAME.update(), 更新文档
// update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(    
	,  // 查询条件,类似sql内的where后面的条件
	, // update的对象和一些更新的操作符(如$,$inc...)等, 类似sql内set后面的值
	{       
		upsert: , // 如果不存在query的文档记录,是否插入objNew,true为插入,false不插入
		multi: ,  // 默认false,只更新查询到的第一条记录,true更新查询到的所有数据
		writeConcern:  // 抛出异常的级别
	}
)
// 先插入一条文档
> db.col.insert({title: 'MongoDB',name:'jack',age:18,count:10,list: [1,2,3,4,5]})
WriteResult({ "nInserted" : 1 })
// 查看文档,有格式的展示
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "jack", "age" : 18, "count" : 10, "list" : [ 1, 2, 3, 4, 5 ] }
>
// $set,查询title="MongoDB"的所有文档,并更新第一条文档的age和name
> db.col.update({'title':'MongoDB'},{$set:{age: 24, name: 'joy'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "age" : 24, "count" : 10, "list" : [ 1, 2, 3, 4, 5 ] }
>

// $inc,查询title="MongoDB"的所有文档,并更新第一条文档的count = 10 + 44,如果不是number类型会报错 
// "Cannot increment with non-numeric argument: {count: \"lk\"}", 不能用非数值参数递增
// 如果该count字段不存在,则会创建该字段,值为44
> db.col.update({title: 'MongoDB'}, {$inc:{count: 44}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "age" : 24, "count" : 54, "list" : [ 1, 2, 3, 4, 5 ] }
>

// $unset,查询title="MongoDB"的所有文档,并删除age字段
> db.col.update({title: 'MongoDB'},{$unset:{age:''}}) // 无论age的值为什么,都能删除该字段
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "count" : 54, "list" : [ 1, 2, 3, 4, 5 ] }
>

// $push,它是用来对Array (list)数据类型进行 增加 新元素的
> db.col.update({title:'MongoDB'},{$push:{list:{"age":18}}}) // list的值可以是对象,字符串,数组等...一次只能添加一个
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "count" : 54, "list" : [ 1, 2, 3, 4, 5, { "age" : 18 } ] }
>

// $pop,删除最后一个或第一个元素
> db.col.update({title:'MongoDB'},{$pop:{list:-1}}) // list的值为 1(从array.length 1 删除) 或 -1(从array[0]删除)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "count" : 54, "list" : [ 2, 3, 4, 5, 8 ] }
>

// $pull,就是指定删除Array中的某一个元素
> db.col.update({title:'MongoDB'},{$pull:{list:3}}) // 删除list中value为3的元素,如果有多个元素的value为3,那就全部删除
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "MongoDB", "name" : "joy", "count" : 54, "list" : [ 2, 4, 5, 8 ] }
>   
// 更多更新方法查看https://www.runoob.com/mongodb/nosql.html
// save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(    
	,
	{      
		writeConcern:  
	}  
)

// save方法,下列中替换了id为5e91992217a8e7f3df85f040的文档数据
> db.col.save({ "_id" : ObjectId("5e91992217a8e7f3df85f040"), title: 'testMongo', name: 'lucy', sex: '女'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("5e91992217a8e7f3df85f040"), "title" : "testMongo", "name" : "lucy", "sex" : "女" }
> 

  1. [SELECT],db.COLLECTION_NAME.find(),查询文档
// 语法
db.collection.find(query, projection)
query	可选参数,查询条件,当省略参数时,则查询集合中所有文档
projection	可选参数,指定了那些字段是需要返回的,若要返回所有字段则不必要指定该参数。find()方法总是包括_id字段,即便你这里没有指定要_id字段
> db.col.find({count:11},{count: 1}) // 0表示不显示文档该字段,显示其他的字段,1表示显示该字段,不显示其他的字段
{ "_id" : ObjectId("5e91a3f817a8e7f3df85f041"), "count" : 11 }
{ "_id" : ObjectId("5e91a3fa17a8e7f3df85f042"), "count" : 11 }
{ "_id" : ObjectId("5e91a3fc17a8e7f3df85f043"), "count" : 11 }
>   
  1. exit || ctrl+c,退出mongodb

更多操作查看MongoDB中文网

你可能感兴趣的:(mongodb_常用命令)