mongodb 详细使用方法_2018_lcf

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 把表名 称为集合名了,表记录称为文档, 下面提及的表记录或表名和集合名或文档是一样的,这里只是习惯了表记录这种称呼.

装包
• 免安装,解压后即可使用(编译过的压缩包)

[root@host5 ~]# mkdir /usr/local/mongodb
[root@host5 ~]# tar -zxf mongodb-linux-x86_64-rhel70-3.6.3.tgz
[root@host5 ~]# cp -r mongodb-linux-x86_64-rhel70-3.6.3/bin /usr/local/mongodb/
[root@host5 ~]# cd /usr/local/mongodb/
[root@host5 mongodb]# mkdir -p etc log data/db
[root@host51 mongodb]# pwd
/usr/local/mongodb
[root@host51 mongodb]# ls
bin  data  etc  log
 
创建配置文件
• 手动创建服务主配置文件

[root@bogon ~]# vim mongodb.conf
#日志存放位置
logpath=/usr/local/mongodb/log/mongodb.log
# 追加的方式记录日志信息
logappend=true
# 数据库目录
dbpath=/usr/local/mongodb/data/db 
# 守护进程方式运行
fork=true
#绑定IP
bind_ip=192.168.4.51
#自定义端口,默认27017
port=27051


1) 常用命命令-命令区分大小写


• 数据库名可以是满足以下条件的任意 UTF-8 字符串
– 不能是空字符串( "") 
– 不得含有 ' ' (空格 ) 、 . 、 $ 、 / 、 \ 和 \0 ( 空字符 )
– 应全部小写。
– 最多 64 字节


数据库管理
• 库管理命令: 查看 创建 切换 删除
– show dbs      //查看已有的库
– db            //显示当前所在的库
– use 库名         //切换库,若库不存在的话 自动延时创建库
– show collections 或 show tables //查看库下已有的集合
– db.dropDatabase()  //删除当前库


删除当前所在的库
文档基本管理 
• 文档管理命令: 查看 统计 添加 删除
– db. 集合名 .find()    //查看表记录
– db. 集合名 .count()   //统计表记录
– db. 集合名 .insert({“name”:”jim”})  //插入记录
– db. 集合名 .find({ 条件 })    //带条件查询记录
– db. 集合名 .findOne()        //返回一条记录
– db. 集合名 .remove({})       //删除所有记录
– db. 集合名 .remove({ 条件 })  //删除与条件匹配的所有记录
– db. 集合名 .drop();          //删除表

示例:

--->下面以test为库名,lcf为表名
>show dbs  //显示已有库
>db        //显示当前库位置
>db.dropDatabase()  //删除当前所在库
>use test //切换库,test是库名,如果没有此库就会创建这个库(前提是在此库里创建有一个表即可,不然就不会创建这个库)
>show tables  //显示当前库下所有表或用命令show collections


----------创建表记录
>db.lcf.save({name:"zjc",age:18,sex:"boy"},{x:1,y:2})   //创建表和表行
WriteResult({ "nInserted" : 1 })    //创建成功显示这个


//格式  db.表名.save({字段名:赋值,字段名:赋值..},{字段名:赋值,字段名:赋值..}...)
//和mysql不同,MongoDB没有固定表结构束缚
//{}行记录写在这里面 ,号是变量间隔和行间隔符
//:前是键值(相当于变量名了) :后是赋值,如是是字符型要加 "",如果是布尔型直接写true或false,数字直接写

-----------查询 统计 添加 删除表记录(示例表名lcf)
> db.lcf.find()        //查看表全部记录
{ "_id" : ObjectId("5b1f329c501b3b22bedfa616"), "name" : "zjc", "age" : 18, "sex" : "boy" }
> db.us.find(age:18,name:"zjc")  //条件查询表记录
> db.lcf.count()                 //固定格式
> db.lcf.insert({aa:333,bb:111}) //添加表记录
> db.lcf.remove(aa:333)  //删除匹配条件的记录
> db.lcf.remove()        //删除所有记录
> db.lcf.drop()          //删除表
> db.t1.insert({name:"lcf",age:null,real:true},{aa:3.4,bb:NumberInt(23),cc:NumberLong(123),dd:[1,"33",32]},{xx:function(){/*echo "haha"*/},time:new Date( ),C:ObjectId()})
WriteResult({ "nInserted" : 1 })
> db.t1.insert({book:{bookname:"qq",tel:1641646},zn:/^[0-9]/})

WriteResult({ "nInserted" : 1 })


数据类型
• mongodb 数据类型总结
– 字符串类型
– 数值类型
– 布尔类型
– 空 / 正则 / 代码
– 数组
– 数值
– 日期
– 对象
– 内嵌

基本数据类型
字符 string/ 布尔 bool/ 空 null
• 字符串 string
– UTF-8 字符串都可以表示为字符串类型的数据
  例: {name:” 张三” } 或 { school:“tarena”}
• 布尔 bool
– 布尔类型有两个值 true 和 false , 
  例: {x:true}
• 空 null
– 用于表示空值或者不存在的字段, 
  例: {x:null}

数值 / 数组 array
• 数值
– shell 默认使用 64 为浮点型数值。
  例: {x : 3.14} 或 {x : 3} 。
– NumberInt ( 4 字节整数) 
  例: {x:NumberInt(3)}
– NumberLong ( 8 字节整数) 
  例: {x:NumberLong(3)}
• 数组 array   键值:[值1,值2,值3...]
– 数据列表或数据集可以表示为数组
  例: {x : [“a“ ,“ b”,”c”]}


代码 / 日期 / 对象
• 代码
– 查询和文档中可以包括任何 JavaScript 代码
  例: {x: function( ){/* 代码 */}}
• 日期
– 日期被存储为自新纪元依赖经过的毫秒数,不存储时区
  例: {x:new Date( )}
• 对象
– 对象 id 是一个 12 字节的字符串,是文档的唯一标识
  例: {x: ObjectId() }


内嵌 / 正则表达式
• 内嵌
– 文档可以嵌套其他文档,被嵌套的文档作为值来处理
  例: {tarena: {address:“Beijing”,tel:“888888”,person:”hanshaoyun”}}
• 正则表达式
– 查询时,使用正则表达式作为限定条件
  例: {x:/ 正则表达式 /}

数据导出
• 语法格式 1
– #mongoexport [--host IP 地址 --port 端口 ] -d 库名 -c 集合名 -f 字段名 1, 字段名 2 --type=csv > 目录名 / 文件名 .csv
• 语法格式 2
– #mongoexport --host IP 地址 --port 端口 - 库名 -c 集合名 -q ‘{ 条件 }’ -f 字段名 1 ,字段名 2 --type=csv > 目录名 / 文件名 .csv
注意:导出为 csv 格式必须使用 -f 指定字段名列表 !!!

------------导出表,type=csv 以表结构导出 , 不适合用于非统一键值的表
[root@host51 mongodb]# mongoexport --host 127.0.0.1 --port 27017 -d las -c us -f name,uid,gid --type=csv > /tmp/aa.csv
2018-06-12T14:41:19.884+0800 connected to: 127.0.0.1:27017
2018-06-12T14:41:19.884+0800 exported 1 record
[root@host51 mongodb]# cat /tmp/aa.csv 
name,uid,gid
root,0,0

------------导出表,type=json 以表创建表形式存储 
[root@host51 mongodb]# mongoexport --host 127.0.0.1 --port 27017 -d las -c us  --type=json > /tmp/aa.json
2018-06-12T14:45:19.470+0800 connected to: 127.0.0.1:27017
2018-06-12T14:45:19.471+0800 exported 1 record
[root@host51 mongodb]# cat /tmp/aa.json 
{"_id":{"$oid":"5b1f451b501b3b22bedfa617"},"name":"root","pw":"x","uid":0.0,"gid":0.0,"bm":"root","homedir":"/root/","shell":"/bin/bash"}

[root@host51 mongodb]# mongoexport --host 127.0.0.1 --port 27017 -d las -c us -f name,uid,gid --type=json > /tmp/aa2.json
2018-06-12T14:47:47.299+0800 connected to: 127.0.0.1:27017
2018-06-12T14:47:47.300+0800 exported 1 record
[root@host51 mongodb]# cat /tmp/aa2.json 
{"_id":{"$oid":"5b1f451b501b3b22bedfa617"},"name":"root","uid":0.0,"gid":0.0}

数据导入
• 语法格式 1
– #mongoimport –host IP 地址 – port 端口 -d 库名 – c 集合名 --type=json 目录名 / 文件名 .json
[root@host51 mongodb]# mongoimport -h 127.0.0.1 -p 27017 -d las -c us --type=json /tmp/pw.json 
• 语法格式 2
– #mongoimport –host IP 地址 – port 端口 -d 库名 – c 集合名 --type=csv --headerline [--drop] 目录名 / 文件名 .csv
注意:导入数据时库和集合不存在时,会创建库和集合后导入数据,反之以追加的方式导入数据到集合里,
[root@host51 mongodb]# mongoimport -h 127.0.0.1 -p 27017 -d las -c us --type=csv --headerline /tmp/pw.csv 
//--headerline 是否忽略第一行表头键名,加上时,会以引用第一行的键键名,第一名不当作记录导入,
[root@host51 mongodb]# mongoimport -h 127.0.0.1 -p 27017 -d las -c us -f name,uid --type=csv /tmp/pw.csv
//这样写可以自定义键值名

数据备份
• 备份数据所有库到当前目录下的 dump 目录下
# mongodump [ --host ip 地址 --port 端口 ]
• 备份时指定备份的库和备份目录
# mongodump [ --host ip 地址 --port 端口 ] -d 数据库名
-c 集合名 -o 目录
目录无需事先创建 备份时指定即可!!!
• 查看 bson 文件内容
#bsondump ./dump/bbs/t1.bson
[root@host51 tmp]# mongodump --host 127.0.0.1 --port 27017
2018-06-12T16:41:03.831+0800 writing admin.system.version to 
2018-06-12T16:41:03.832+0800 done dumping admin.system.version (1 document)
2018-06-12T16:41:03.832+0800 writing las.us to 
2018-06-12T16:41:03.832+0800 writing las.lcf to 
2018-06-12T16:41:03.832+0800 writing bbsdb.lcf to 
2018-06-12T16:41:03.833+0800 done dumping las.us (49 documents)
2018-06-12T16:41:03.833+0800 done dumping las.lcf (2 documents)
2018-06-12T16:41:03.834+0800 done dumping bbsdb.lcf (0 documents)
//备份整个数据库

[root@host51 tmp]# mongodump --host 127.0.0.1 --port 27017 -d las  -o /tmp
2018-06-12T16:43:43.066+0800 writing las.us to 
2018-06-12T16:43:43.066+0800 writing las.lcf to 
2018-06-12T16:43:43.067+0800 done dumping las.us (49 documents)
2018-06-12T16:43:43.068+0800 done dumping las.lcf (2 documents)
//备份指定库到指定目录下,也可以加上 -c 集合名 备份某个表

数据恢复
• 语法格式
– mongorestore --host IP 地址 --port 端口 -d 数
据库名 [ -c 集合名 ] 备份目录名
[root@host51 mongodb]# mongorestore --host 127.0.0.1 -p 27017 -d eee /tmp/dump/las
2018-06-12T16:57:57.414+0800 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2018-06-12T16:57:57.414+0800 building a list of collections to restore from /tmp/dump/las dir
2018-06-12T16:57:57.415+0800 reading metadata for eee.us from /tmp/dump/las/us.metadata.json
2018-06-12T16:57:57.625+0800 restoring eee.us from /tmp/dump/las/us.bson
2018-06-12T16:57:57.627+0800 no indexes to restore
2018-06-12T16:57:57.627+0800 finished restoring eee.us (49 documents)
2018-06-12T16:57:57.628+0800 reading metadata for eee.lcf from /tmp/dump/las/lcf.metadata.json
2018-06-12T16:57:57.864+0800 restoring eee.lcf from /tmp/dump/las/lcf.bson
2018-06-12T16:57:57.867+0800 no indexes to restore
2018-06-12T16:57:57.867+0800 finished restoring eee.lcf (2 documents)
2018-06-12T16:57:57.867+0800 done

//可以恢复到不存在的库上,然后里面会自动创建该库

-------------------------------------------------------------------------------------------副本集
副本集介绍(和主同从步差不多相同功能)

– MongoDB 复制是将数据同步在多个服务器的过程。
– 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
– 复制还允许您从硬件故障和服务中断中恢复数据

复制原理
• 副本集工作过程


– mongodb 的复制至少需要两个节点。其中一个是主
   节点,负责处理客户端请求,其余的都是从节点,负
   责复制主节点上的数据。
– mongodb 各个节点常见的搭配方式为:一主一从、一主多从。
– 主节点记录在其上的所有操作 oplog ,从节点定期轮
   询主节点获取这些操作,然后对自己的数据副本执行
   这些操作,从而保证从节点的数据与主节点一致。


副本集实现方式
• Master-Slave 主从复制


– 实现数据同步只需要在某一台服务器启动时加上 "-ma
  ster" 参数,以指明此服务器的角色是 primary ;另一
   台服务器加上 "-slave" 和 "-source" 参数,以指明此
  服务器的角色是 slave 。
• 主从复制的优点如下:
– 从服务器可以执行查询工作,降低主服务器访问压力。
– 在从服务器执行备份,避免备份期间锁定主服务器的数据。
– 当主服务器出现故障时,可以快速切换到从服务器,减少当机时间。


副本集实现方式(续 1 )
• Replica Sets 复制集


– MongoDB 在 1.6 版本对开发了新功能 replica set,这比之前的 replication 功能要强大一 些,增加了
   故障自动切换和自动修复成员节点,各个 DB 之间数
   据完全一致,大大降低了维 护成功。使用 replica set
   故障切换完全自动。
– Replica Sets 的结构类似一个集群,完全可以把它当
   成一个集群,因为它确实与集群实现的作用是一样的
   如果其中一个节点出现故障,其他节点马上会将业
   务接管过来而无须停机操作
   
配置 Replica Sets 副本集   
运行服务
• 启动服务时,指定主机所在副本集名称
– 副本集成员间使用相同的副本集名称
– --replSet rs1 // 指定副本集名称
[root@server0 ~]#mkdir /data/db
[root@server0 ~]#./mongod --bind_ip 192.168.4.61 \
--logpath=/var/log/mongod.log --replSet rs1 &
[root@server0 ~]# jobs
Running .........


配置节点信息
• 在任意一台主机连接 mongod 服务,执行如下操作
[root@server0 ~]# ./mongo --host 192.168.4.61
>config = {
_id:"rs1",
members:[
{_id:0,host:“IP 地址 : 端口 "},
{_id:1,host:“IP 地址 : 端口 "},
{_id:2,host:“IP 地址 : 端口 "}
]
};


初始化 Replica Sets 环境
• 执行如下命令
– >rs.initiate(config)


查看副本集信息
• 查看状态信息
– > rs.status( )
• 查看是否是 master 库
– > rs .isMaster( )


验证副本集配置
• 同步数据验证
– >db.getMongo( ).setSlaveOk( ) 允许从库查看数据
• 自动切换主库验证
– > rs.isMaster( ) 查看是否是主库


~~~~~标记说明
_id:是用来标识复制集,参数内容和数据库启动的时候设置的rplSet参数一致
version:用来表示config参数的新旧,每次修改了config然后使用rs.reconfig重新配置的时候version的值会自动加1
protocolversion:是协议版本
members是一个数组,数组成员表示每个节点的信息.下面结束members的主要内容.
_id:用来标识节点号,唯一
host:表示节点的地址和端口信息
arbiterOnly:这是一个bool型,默认为false,用来表示这个节点是否是arbiter节点,只是用来投票
buildIndexes:这也是一个bool型,默认为true.用来表示同步的时候是否同步索引.一般设置为true.如果要设置为false,则必须将priority设置为0
hidden:这也是bool型,默认问false,用来表示这个节点是否为隐藏节点,如果是隐藏节点将不对外服务,只是单纯的同步信息,而且如果设置为了隐藏节点,使用rs.isMaster()方法将无法查看到隐藏节点的信息,但是可以使用rs.status()查看.设置隐藏节点必须首先将节点的priority设置为0
priority:表示权重,默认为1,如果将priority设置为0那么这个节点将永远无法成为primary节点,现在新的版本可以设置为超过1的数
slaveDelay:复制延迟,这个是整数,单位为秒,用来设置复制的延时.一般用来防止误操作,延迟节点必须优先级设置为0,hidden设置为true,然后设置slaveDelay值,
votes:表示这个节点是否有权利进行投票.
tags:表示标记,例如可以标记这个节点的作用等
settings是一些配置信息
chainingAllowed:表示是否允许链式复制,即某个secondary可以作为其它的secondary的源,默认是true.
heartbeatIntervalMillis:表示heartbeat的间隔时间,默认是没个两秒钟发送一个hearbeat包.
heartbeatTimeoutSecs:表示心跳检测超时时间,默认是10秒.
electionTimeoutMillis:表示选举超时时间,默认是10秒.
~~~~~
-------------------------------------------------------------------------------------------------------------------------------
db.表名.save 详细用法


– 集合不存在时创建集合,后插入记录
– _id 字段值 已存在时 修改文档字段值
– _id 字段值 不已存在时 插入文档


11//当表不存在时,save起到创建表的作用,这时不用用_id键值, save一次只能写入或修改一条记录
22//当表存在时,想要用save往已经存在的表里写记录时,要第一个键值名上写入_id:数字编号/或自动获取编号_id:Objectid()
33//当表存在时,_id编号也存在了,就变成更改当前行记录的作用了


11示例
> db.test.save({n:01},{n:02})
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5b20bd82501e294dff8234a5"), "n" : 1 }
//结果创建时只写入了一行记录


22示例
> db.test.save({_id:12,n:2},{_id:ObjectId(),n:3})   //结果只能添加一条记录
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 12 })
> db.test.find()
{ "_id" : ObjectId("5b20bd82501e294dff8234a5"), "n" : 1 }
{ "_id" : 12, "n" : 2 }


33示例
> db.test.save({_id:12,n:666})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find()
{ "_id" : ObjectId("5b20bd82501e294dff8234a5"), "n" : 1 }
{ "_id" : 12, "n" : 666 }


db.表名.insertMany([{..},{..}..]) 多记录写入 


– 集合不存在时创建集合,后插入记录
– _id 字段值 已存在时放弃插入
– _id 字段值 不已存在时 插入文档


55示例
> db.test.insertMany([{a:1},{a:2},{a:3}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5b20c65e501e294dff8234a8"),
ObjectId("5b20c65e501e294dff8234a9"),
ObjectId("5b20c65e501e294dff8234aa")
]
}
> db.test.find()
{ "_id" : ObjectId("5b20c65e501e294dff8234a8"), "a" : 1 }
{ "_id" : ObjectId("5b20c65e501e294dff8234a9"), "a" : 2 }
{ "_id" : ObjectId("5b20c65e501e294dff8234aa"), "a" : 3 }

查询语法

• 显示所有行,默认一次只输出 20 行 输入 it 显示后续的db. 
  db.集合名 .find()
• 显示第 1 行
  db. 集合名 .findOne()
• 指定查询条件并指定显示的字段
  db. 集合名 .find ( { 条件 },{ 定义显示的字段 } )
  例: db.user.find({},{_id:0,name:1,shell:1})
   0 不显示 1 显示

行数显示限制
• limit( 数字 ) // 显示前几行
  db. 集合名 .find().limit(3)
• skip( 数字 ) // 跳过前几行
  db. 集合名 .find().skip(2)
• sort( 字段名 ) // 排序
  db. 集合名 .find().sort({age:1|-1}) 1 升序 -1 降序
   例: db.user.find({shell:"/sbin/nologin"},{_id:0,name:1,uid:1,shell:1}).skip(2).limit(2)

• 简单条件
– db. 集合名 .find({key:” 值” })
– db. 集合名 .find({key:” 值”, keyname:” 值” })
   例: db.user.find({shell:"/bin/bash"})
   例: db.user.find({shell:"/bin/bash",name:"root"})

• 正则匹配
   例: db.user.find({name: /^a/ })

• 数值比较
– $lt $lte $gt $gte $ne
    <   <=   >   >=   !=
   例: db.user.find( { uid: { $gte:10,$lte:40} } , {_id:0,name:1,uid:1})
   例: db.user.find({uid:{$lte:5,}})

• 匹配 null , 也可以匹配没有的字段

示例:
– > db.user.save({name:null,uid:null})
– > db.user.find({name:null})

更新记录
• update()更新记录
   语法格式A:  db. 集合名 .update({ 条件 },{ 修改的字段 } )  //修改整行记录,并且只修改匹配条件的第一行记录
示例
> db.test.find()
{ "_id" : ObjectId("5b20d087501e294dff8234ab"), "a" : 86, "b" : 123, "c" : "sss" }
> db.test.update({a:86},{b:3333})      //修改匹配条件的记录
> db.test.find()
{ "_id" : ObjectId("5b20d087501e294dff8234ab"), "b" : 3333 }
  
   语法格式B:  db. 集合名 .update({ 条件 },$set:{ 修改的字段 } )  //修改指定键值(字段)名
示例
> db.test.find()
{ "_id" : 12, "a" : 11, "name" : "haha" }
> db.test.update({a:11},{$set:{na:"tom"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find()
{ "_id" : 12, "a" : 11, "name" : "haha", "na" : "tom" }
> db.test.update({a:11},{$set:{name:"tom"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find()
{ "_id" : 12, "a" : 11, "name" : "tom", "na" : "tom" }
//可以看到,当修改的字段不存在,变成了在原记录中插入这个字段和字段值.
//当修改的字段存在时,就正常的修改字段值

多记录(文档)更新
• 语法格式:默认只更新与条件匹配的第 1 行,也就是false
– > db.user.update({ 条件 },{$set:{ 修改的字段 }} ,false,true )
  例: db.user.update({name:“bin”},{$set:{password:“abc12123”}} , false,true)
  例: db.us.update({uid:{$lt:3}},{$set:{uid:66}},false,true)

字段值自增减
$inc
• $inc 条件匹配时,字段值自加或自减
– db. 集合名 .update({ 条件 },{$inc:{ 字段名 : 数字 }})
   例: db.us.update({uid:59},{$inc:{gid:1}})
   例: db.us.update({uid:59},{$inc:{gid:-1}})

数组编缉

数组中添加新元素
$push / $addToSet
• $push 向数组中添加新元素
– db. 集合名 .update({ 条件 },{$push:{ 数组名 :“ 值” }})
示例
> db.user.insert({name:"bob",likes:["a","b","c","d","e","f"]})
> db.user.update({name:“bob”},{$push:{likes:“w",likes:"a"}})
• $addToSet 避免重复添加
– db. 集合名 .update({ 条件 },{$addToSet:{ 数组名 :”值” }}) 
   例: db.user.update({name:"bob"},{$addToSet:{likes:“f"}})

数组头部删除一个元素
$pop /$pull
• $pop 从数组头部删除一个元素
– db. 集合名 .update({ 条件 },{$pop:{ 数组名 : 数字 }})
   例: db.user.update({name:"bob"},{$pop:{likes:1}})
   例: db.user.update({name:"bob"},{$pop:{likes:-1,}})
1 删除数组尾部元素 -1 删除数组头部元素
• $pull 删除数组指定元素
– db. 集合名 .update({ 条件 },{$pull:{ 数组名 : 值 }})
   例: db.user.update({name:"bob"},{$pull:{likes:"b"}})

删除表 删除表记录

$drop/$remove
• $drop 删除集合的同时删除索引
– db. 集合名 .drop( )
   例: db.user.drop( )


• remove() 删除文档时不删除索引
– db. 集合名 .remove({}) // 删除所有文档
– db. 集合名 .remove({ 条件 }) // 删除与条件匹配的文档
   例: db.user.remove({uid:{$lte:10}})
   例: db.user.remove({})


更新命令总结
类 型             用 途
$set      修改文档指定字段的值
$unset    删除记录中的字段
$push     向数组内添加新元素
$pull     删除数组中的指定元素
$pop      删除数组头尾部元素
$addToSet 避免数组重复赋值
$inc      字段自加或自减


猜你喜欢

转载自blog.csdn.net/cbuy888/article/details/80671031