mongodb数据库的常规操作命令

Mongodb 命令
设置数据库存储位置
mongodb --dbpath 目录

e.g. 将存储路径设置为dbs
mongodb --dbpath dbs

设置数据库监听端口
mongod --port 8080
* 默认监听端口27017

一,数据库的操作

1,数据库的创建
use database

e.g.创建一个名字为stu的数据库
*use 实际为选择使用哪个数据库,当数据库不存在时会自动创建
*use后不会立即创建出数据库,而是需要等待插入数据时数据库才会创建

2,查看系统中的数据库

show dbs

系统数据库说明
admin:存储用户信息
local:存储本地数据
config:存储分片信息

3,删除数据库
db.dropDatabase()
删除db所代表的数据库(删除现在所在的库),

二,集合的操作

1,创建集合

方法1
db.createCollection(collection_name)

e.g. 创建class1集合
db.createCollection("class1")

方法2
当向一个集合中插入数据的时候如果集合不存在则自动创建
db.collection_name.insert(..)

2,查看数据库中的集合
show collections
show tables

集合命名规则
1,合法的UTF-8字符
2,不能有‘’
3,不能以system.开头,因为这是系统保留集合前缀
4,不能和关键字重名,

3,删除集合

db.collection.drop()
删除class2 集合
db.class2.drop(),

4,集合的重命名

db.collection.renameCollection('new name')

e.g. 将class集合重命名为class0
db.class.renameCollection('new name')

3,文档操作
mongodb中数据的组织形式---》文档
mongodb 文档:是以键值对的形式组成的一组数据。类似python
中字典描述数据的方式

键:即文档的域,表达了一个键值对的含义

键的命名规则
1,utf8格式字符串
2,不能使用‘’
3,一个文档中的键不能重复

1,插入文档
db.collection.insert()
功能:插入一个文档
参数:要插入的文档

(1)插入单个文档

e.g.
db.class0.insert({'name':'Lucy','age':18,'sex':'w'})

*插入操作中键可以不加引号
*插看插入结果 db.class0.find()
*_id 值可以自己插入,但是不能重复

(2)插入多条文档
e.g.
db.class0.insert([{name:'Alex',age:19,sex:'m'},{name:'Abby',age:18,sex:'w'}])

db.class0.insertmany([{'name':'john',age:16,sex:'m'},{name:'lenzer',age:17,sex:'m'}])

(3)save插入文档
db.collection.save()

如果正常插入与insert用法相同
db.class0.save([{name:'Sunny',age:17,sex:'W'},{name:'Alice',age:16,sex:'w'}])

如果插入数据是由_id域,且_id域存在时刻则会修改原有文档,如果该值不存在则正常输入
db.class0.save({_id:2,name:'Mary',age:20,sex:'w'})

获取集合对象方法
db.class0----->db.getCollecton('class0')
e.g.
db.getCollection('class0').find() = db.class0.find()

2,查找操作
mysql:select * from 表名 where 子句

mongo :db.collection.find(query,field)

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

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

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

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


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

e.g .查找结果只有name域
db.class0.find({sex:'w'},{_id:0,name:1})

findOne(query,field)
功能:查找第一条符合的文档
参数:同find
返回值:返回查找到的文档

pretty()
格式化显示查询结果
db.class1.find().pretty()

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

db.class0.find({},{_id:0}).limit(3)

skip(n)
功能:跳过前n条显示后面的查询结果

count()
统计查询结果数量
*在统计数量是要给出一定的query条件
统计性别为w的文档个数
db.class0.find({sex:'w'},{_id:0}).count()

sort({field:1/-1})
功能:对查找结果排序
参数:以键值对表示按照那个field排序
1,表示升序-1表示降序
查询按照降序排序
db.class0.find({age:{$gt:18}},{_id:0}).sort({age:-1})
按照年龄降序排序,当年龄相同时按名字升序排序
db.class0.find({age:{$gt:18}},{_id:0}).sort({age:-1,name:1})

db.class0.find({age:{$gt:18}},{_id:0}).sort({age:-1,name:1}).limit(3)

3,删除文档
mysql:delete from table where
alter table
mongodb:db.collection.remove(query,justone)

remove(query,justone)
功能:删除文档
参数:query 用法同find
justone 布尔值 默认为false表示删除所有的符合条件的
文档,设置为True则表示值删除一条
删除所有不存在sex域的文档
db.class1.remove({sex:{$exists:false}})
删除第一条性别为'w'的文档
db.class1.remove({sex:'w'},true)
删除集合中所有文档
db.class1.remove({})

4,修改文档
mysql:update table set...where..
mongodb:db.collection.update(query,update,upset.multi)


update(query,update,upset.multi)
功能:修改文档
参数: query 筛选条件 用法同find
update 要修改成什么内容,通常配合修改操作符
(修改器)使用
upsert 布尔值,默认是false,如果query没有
筛选到文档则不作任何操作
如果设置为True 则如果query没有筛选到匹配
文档则根据query和update内容插入到新文档
multi 布尔值,默认false,表示如果有多条符合条件
文档则只修改一个
如果为True 则表示修改所有符合条件
将年龄修改为18
db.class0.update({name:'Tom'},{$set:{age:18}})

将第三个参数为True时,当文档名不存在会添加一个文档
db.class0.update({name:'Tom'},{$set:{age:18}},true)
修改所有年龄小于17的都改成18岁
db.class0.update({age:{$lt:17}},{$set:{age:18}},false,true)

原文地址:https://www.cnblogs.com/xinin0909/p/10009487.html