附加命令:
1、进入前端操作命令
1
|
./mongo [ip:端口]
|
说明:默认会自动选本地,端口27017
2、显示所有的库
1
|
> show dbs; 或者 show databases;
|
3、选择库
1
|
>
use
库名;
|
4、显示库所有的集合
1
|
> show collections; 或者 show tables;
|
5、显示当前使用的库
1
|
> db;
|
一、操作数据库、文档
1.1、数据库操作
1、创建数据库:MongoDB没有专门创建数据库的语句,可以使用“use” 来使用某个数据库,如果要使用
的数据库不存在,那么将会创建一个,会在真正向该库加入文档后,保存成为文件。
1
|
>
use
db_test;
|
2、删除数据库,命令:db.dropDatabase(),注意先要进入到需删除的库
1
2
3
4
5
|
>
use
db_test;
switched to db db_test
> db.dropDatabase();
{
"ok"
: 1 }
>
|
1.2、集合操作
1、创建集合:在MongoDB中不用创建集合,因为没有固定的结构,直接使用db.集合名称.命令 来操作就可以了。如果非要显示创建集合的话,用:db.createCollecion(“集合名称”);
2、删除集合,命令:dorp
1
|
> db.test1.drop();
|
1.3、查看集合的状态信息
db.集合名.stats();
二、增删改
2.1、添加
db.集合名称.insert(数据);
1
|
> db.test1.insert({
"username"
:
"zhangsan"
,age:2});
|
insert方法,可以单独插入一个文档,也可以插入多个,用“[ ]”即可。注意:
1:MongoDB会为每个没有“_id”字段的文档自动添加一个”_id”字段
2:每个Doc必须小于16MB
3:可以在shell中执行Object.bsonsize(文档名称);来查看size大小
2.2、删除
命令:remove,可以按条件来删除
只是删除文档,集合还在,如果使用 drop命令,会连带集合和索引都删掉
1
|
> db.test1.remove({age:2});
|
注意:如果使用remove没有带条件,则会删除此集合中所有的文档。
2.3、更新
db.集合名称. update(条件,新的文档[,boolean,boolean]);
1
|
> db.test1.update({
"userId"
:
"1"
},{
"userId"
:
"1"
,
"username"
:
"zhangsan"
,
"age"
:10});
|
问题:
1、这里如果有多个文档匹配,只会更新第一个文档。
2、这个修改的是整个文档
解决:
使用修改器
更新修改器,用来做复杂的更新操作
1:$set :指定一个字段的值,如果字段不存在,会创建一个
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$set"
:{
"username"
:
"zhangsan"
}},0,1);
|
说明:如果userId为1,则更新其username为zhangsan
1
|
> db.test1.update({
"userId"
:
"1"
},{
$set
:{
"score.1"
:7}});
|
说明:更新数组score的索引为1的值为7,索引从0开始。
2:$unset :删掉某个字段
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$unset"
:{
"username"
:1}},0,1);
|
3:$inc :用来增加已有键的值,如果字段不存在,会创建一个。只能用于整型、长整型、或双精度浮点型的值。
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$inc"
:{
"age"
:3}},0,1);
|
说明:如果userId为1,则将其age的值增加3
4:$push:向已有数组的末尾加入一个元素,要是没有就新建一个数组
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$push"
:{
"score"
:1}},0,1);
|
5:$each:通过一次$push来操作多个值
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$push"
:{
"score"
:{
$each
:[4,5,6]}}},0,1);
|
6:$slice:限制数组只包含最后加入的n个元素,其值必须是负整数
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$push"
:{
"score"
:{
$each
:[7,8,9],
$slice
:-5}}});
|
7:$sort:对数组中的元素,按照指定的字段来对数据进行排序(1为升序,-1为降序),然后再按照slice删除。
注意:不能只将$slice或者$sort与$push配合使用,且必须使用$each
1
|
> db.test1.update({
"userId"
:
"1"
},{
"$push"
:{
"score"
:{
$each
:[1,2,3],
$slice
:-5,
$sort
:-1}}});
|
8:$ne:判断一个值是否在数组中,如果不在则添加进去
1
|
> db.test1.update({
"userId"
:
"1"
,
"score"
:{
$ne
:4}},{
$push
:{
"score"
:4}});
|
9:$addToSet:将数组作为数据集使用,以保证数组内的元素不会重复
1
|
> db.test1.update({
"userId"
:
"1"
},{
$addToSet
:{
"score"
:8}});
|
10:$pop :从数组一端删除元素,{$pop:{key:1}},从末尾删掉一个,-1则从头部删除
1
|
> db.test1.update({
"userId"
:
"1"
},{
$pop
:{score:1}});
|
11:$pull:按照条件来删除所有匹配的元素
1
|
> db.test1.update({
"userId"
:
"1"
},{
$pull
:{score:7}});
|
12:$:用来修改第一个匹配的元素
1
|
> db.test1.update({
"score.0"
:5},{
$set
:{
"score.$"
:7}});
|
说明:如果score的第0个索引值为5,则更新score的第0个索引值为7
三、补充方法
3.1、save方法
如果文档存在就更新,不存在就新建,主要根据”_id”来判断。
添加:
更新:
3.2、upsert方法
找到了符合条件的文档就更新,否则会以这个条件和更新文档来创建一个新文档。
指定update方法的第三个参数为true,可表示是upsert
3.3、更新多个文档
MongoDB默认只更新符合条件的第一个文档,要更新所有匹配的文档,把第4个参数
设置为true。注意:
1:只能用在$XXX的操作中
2:最好每次都显示的指定update的第4个参数,以防止服务器使用默认行为
3.4、查询更新了多少个文档
使用命令:getLastError ,返回最后一次操作的相关信息,里面的n就是更新的文
档的数量。形如:db.runCommand({"getLastError":1});
本文转自我爱大金子博客51CTO博客,原文链接http://blog.51cto.com/1754966750/1929096如需转载请自行联系原作者
我爱大金子