真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB基礎(chǔ)知識(shí)(一)

 互聯(lián)網(wǎng)行業(yè)的發(fā)展非常的迅速,數(shù)據(jù)存儲(chǔ)以及架構(gòu)優(yōu)化方面也有很多不同的解決方案,例如關(guān)系型數(shù)據(jù)庫(kù)、非關(guān)系型數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)技術(shù)等。更多數(shù)據(jù)庫(kù)類產(chǎn)品的出現(xiàn),為我們很好的解決了數(shù)據(jù)存儲(chǔ)的問題,例如redis緩存,MySQL關(guān)系型數(shù)據(jù)庫(kù),MongoDB文檔型數(shù)據(jù)庫(kù),Hbase數(shù)據(jù)倉(cāng)庫(kù)等。

十多年品牌的成都網(wǎng)站建設(shè)公司,超過千家企業(yè)網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn).價(jià)格合理,可準(zhǔn)確把握網(wǎng)頁(yè)設(shè)計(jì)訴求.提供定制網(wǎng)站建設(shè)、購(gòu)物商城網(wǎng)站建設(shè)、微信小程序開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等服務(wù),我們?cè)O(shè)計(jì)的作品屢獲殊榮,是您值得信賴的專業(yè)網(wǎng)站建設(shè)公司。

 隨著業(yè)務(wù)的發(fā)展,在對(duì)架構(gòu)優(yōu)化時(shí),選取了MongoDB存儲(chǔ)一部分?jǐn)?shù)據(jù),作為一個(gè)運(yùn)維人員只能迎頭趕上,去學(xué)習(xí)操作和維護(hù)相關(guān)知識(shí)。下面的文檔就是自己學(xué)習(xí)MongoDB數(shù)據(jù)庫(kù)的學(xué)習(xí)筆記,主要有以下特點(diǎn):

1、理論較少,主要是實(shí)際操作,

2、和關(guān)系型數(shù)據(jù)庫(kù)MySQL對(duì)比學(xué)習(xí),主要是一些操作方面。俗話說沒有對(duì)比,就沒有傷害,兩個(gè)不同類型的數(shù)據(jù)庫(kù)對(duì)比學(xué)習(xí),會(huì)更好的提高學(xué)習(xí)效率。

一、庫(kù)的操作

  MySQL與MongoDB在 庫(kù)、表、數(shù)據(jù)等概念上有以下差異,MySQL中有數(shù)據(jù)庫(kù)Database,表 table,數(shù)據(jù)行列等概念,而MongoDB中沒有表和行列等概念,主要包含數(shù)據(jù)庫(kù)Database,集合collections,以及文檔。

RDBMS vs NOSQL

RDBMS 
- 高度組織化結(jié)構(gòu)化數(shù)據(jù) 
- 結(jié)構(gòu)化查詢語(yǔ)言(SQL) (SQL) 
- 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。 
- 數(shù)據(jù)操縱語(yǔ)言,數(shù)據(jù)定義語(yǔ)言 
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)

NoSQL 
- 代表著不僅僅是SQL
- 沒有聲明性查詢語(yǔ)言
- 沒有預(yù)定義的模式
-鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ),圖形數(shù)據(jù)庫(kù)
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理 
- 高性能,高可用性和可伸縮性

1.1 查看所有數(shù)據(jù)庫(kù)(已經(jīng)存在)

#MySQL
mysql> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| winner             |
+--------------------+
4 rows in set (0.04 sec)

#MongoDB
[root@iZ23t094y03Z ~]# mongo
MongoDB shell version: 2.4.14
connecting to: test
> show dbsshow dbs
col     0.203125GB
local   0.078125GB
test    0.203125GB
winner2 0.203125GB
查看當(dāng)前數(shù)據(jù)庫(kù)
mysql> select  database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.03 sec)

mysql> use  winner
Database changed
mysql> select  database();
+------------+
| database() |
+------------+
| winner     |
+------------+
1 row in set (0.00 sec)

#MongoDB
> db db 
test

注意事項(xiàng):

  在MongoDB里面,連接數(shù)據(jù)庫(kù)服務(wù)端時(shí),在不指定數(shù)據(jù)庫(kù)名時(shí)。默認(rèn)test庫(kù),而MySQL默認(rèn)是空,當(dāng)我們切換到具體數(shù)據(jù)庫(kù)時(shí),才能看到具體的當(dāng)前數(shù)據(jù)庫(kù)信息。

1.2切換數(shù)據(jù)庫(kù)

在切換數(shù)據(jù)庫(kù)時(shí),命令都是使用use + 庫(kù)名,但是兩者之間還是有比較大的區(qū)別,MongoDB中,如果沒有輸入的庫(kù)名,它會(huì)創(chuàng)建一個(gè)庫(kù)名,而MySQL在所有當(dāng)前庫(kù)中,沒有你輸入的數(shù)據(jù)庫(kù)名時(shí),會(huì)報(bào)錯(cuò)。

> show  dbs
col     0.203125GB
local   0.078125GB
test    0.203125GB
winner2 0.203125GB
> use  win
switched to db win
> db 
win
#MySQL
mysql> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| winner             |
+--------------------+
4 rows in set (0.00 sec)

mysql> use  win;
ERROR 1049 (42000): Unknown database 'win'
mysql>

1.3創(chuàng)建數(shù)據(jù)庫(kù)

 MongoDB沒有具體的創(chuàng)建數(shù)據(jù)庫(kù)的命令,一般在切換的過程中,如果不存在該數(shù)據(jù)庫(kù),就會(huì)新建數(shù)據(jù)庫(kù),而MySQL中有create  database  databasename語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)。

mysql> use  win;
ERROR 1049 (42000): Unknown database 'win'  #未創(chuàng)建前
mysql> create database  win;  #創(chuàng)建語(yǔ)句 一般我們創(chuàng)建時(shí) 還會(huì)指定字符集什么的
Query OK, 1 row affected (0.00 sec)

mysql> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| win                |
| winner             |
+--------------------+
5 rows in set (0.00 sec)


MongoDB
use DATABASE_NAME
如果數(shù)據(jù)庫(kù)不存在,則創(chuàng)建數(shù)據(jù)庫(kù),否則切換到指定數(shù)據(jù)庫(kù)。

1.4 刪除數(shù)據(jù)庫(kù)

 剛學(xué)完創(chuàng)建和切換,創(chuàng)建后,我們又不想要它了,所以我們考慮一下如何刪除呢???MongoDB中用db.dropDatabase()刪除當(dāng)前庫(kù),而MySQL中使用 drop  database databasename;刪除你要?jiǎng)h除的庫(kù)。

MySQL
mysql> create  database winner2;  #創(chuàng)建庫(kù)
Query OK, 1 row affected (0.00 sec)

mysql> use winner2;  #切換庫(kù)
Database changed
mysql> select database(); #查看當(dāng)前庫(kù)
+------------+
| database() |
+------------+
| winner2    |
+------------+
1 row in set (0.00 sec)

mysql> drop database  winner2;  #刪除winner2
Query OK, 0 rows affected (0.00 sec)

mysql> select database(); #查看當(dāng)前庫(kù)
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

MongoDB
use  winner2 #創(chuàng)建winner庫(kù)
switched to db winner2
show   dbs;#查看當(dāng)前所有的庫(kù)
col     0.203125GB
winner2 0.203125GB
db  #查看當(dāng)前庫(kù)
winner2
MySQL中刪除某個(gè)當(dāng)前庫(kù)后,再次查看當(dāng)前庫(kù)是NULL,而MongoDB中刪除當(dāng)前庫(kù)后,仍然顯示當(dāng)前庫(kù)
db.dropDatabase() #刪除當(dāng)前庫(kù)
{ "dropped" : "winner2", "ok" : 1 }
> db  檢查當(dāng)前庫(kù)
winner2
show  dbs#檢查所有的庫(kù)
col     0.203125GB
>

2、表與集合操作

 在我們學(xué)習(xí)過數(shù)據(jù)庫(kù)相關(guān)理論知識(shí)后,我們都知道數(shù)據(jù)是存儲(chǔ)在表中,而數(shù)據(jù)庫(kù)是用來存儲(chǔ)數(shù)據(jù)表的。而MongoDB和MySQL的表概念是不一樣的,MongoDB是將文檔數(shù)據(jù)存儲(chǔ)在集合(collection)中,而MySQL是將數(shù)據(jù)存儲(chǔ)在表(table)中,集合是沒有表的結(jié)構(gòu)的,而表是有相關(guān)的結(jié)構(gòu),例如字段、字段類型、索引、主鍵、存儲(chǔ)引擎等。

2.1 查看當(dāng)前所有表

#MySQL
mysql> use  mysql 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |

#MongoDB
show  dbs
col     0.203125GB
> use col
switched to db col
> show  collections
system.indexes
winner
winner2
>

2.2 創(chuàng)建表或者集合

 MySQL數(shù)據(jù)是存儲(chǔ)在相關(guān)的表中,而MongoDB數(shù)據(jù)是存儲(chǔ)在集合中,MySQL由于支持插件式存儲(chǔ)引擎,字段類型、索引、主鍵、等原因,讓其創(chuàng)建表結(jié)構(gòu)的語(yǔ)句比較復(fù)雜,在應(yīng)用系統(tǒng)中,性能優(yōu)化等情況和表結(jié)構(gòu)息息相關(guān)。而MongoDB主要是用來存儲(chǔ)key(values)類型的數(shù)據(jù),所以要簡(jiǎn)單很多。

mysql> use  winner
Database changed
mysql> show  tables
    -> ;
Empty set (0.00 sec)

mysql> create  table  winer(id  int not null primary key auto_increment,
    -> name   varchar(20) not null ,
    -> age  tinyint not null,
    -> sex  tinyint not null default '0') engine=innodb charset utf8;
Query OK, 0 rows affected (0.24 sec)
mysql> desc  winer;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| age   | tinyint(4)  | NO   |     | NULL    |                |
| sex   | tinyint(4)  | NO   |     | 0       |                |
+-------+-------------+------+-----+
#MongoDB創(chuàng)建集合
在MongoDB中,要操作一個(gè)集合,并不需要先創(chuàng)建它??梢灾苯油侠锩娌迦霐?shù)據(jù),如果集合不存在,
會(huì)自動(dòng)創(chuàng)建集合,并插入數(shù)據(jù)。

2.3 表與集合的增刪改查

 在知道了如何創(chuàng)建一個(gè)表、集合等相關(guān)知識(shí)后,我們就要想著如何對(duì)表或者集合數(shù)據(jù)做修改,而我們的應(yīng)用系統(tǒng)、業(yè)務(wù)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)主要就是增刪改查等相關(guān)的操作。

2.3.1插入數(shù)據(jù)

MySQL中插入數(shù)據(jù)

創(chuàng)建表SQL語(yǔ)句

 CREATE TABLE `winer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `age` tinyint(4) NOT NULL,
  `sex` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
表結(jié)構(gòu)
mysql> desc winer
    -> ;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| age   | tinyint(4)  | NO   |     | NULL    |                |
| sex   | tinyint(4)  | NO   |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

1、插入單條數(shù)據(jù)

mysql> insert into winer (name,age,sex) values("MySQL",20,1)
    -> ;
Query OK, 1 row affected (0.09 sec)

mysql> select  * from winer;
+----+-------+-----+-----+
| id | name  | age | sex |
+----+-------+-----+-----+
|  1 | MySQL |  20 |   1 |
+----+-------+-----+-----+
1 row in set (0.00 sec)

2、批量插入

mysql> insert into winer (name,age,sex) value("MySQL",20,1),("Docker",8,0)
    -> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into winer (name,age,sex) values("MySQL",20,1),("Docker",8,0)
    -> ;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
兩個(gè)插入語(yǔ)句之間區(qū)別value和values兩者都能插入單個(gè)值或者批量值
mysql> select  * from winer;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | MySQL  |  20 |   1 |
|  2 | MySQL  |  20 |   1 |
|  3 | Docker |   8 |   0 |
|  4 | MySQL  |  20 |   1 |
|  5 | Docker |   8 |   0 |
+----+--------+-----+-----+
5 rows in set (0.00 sec)

3、其他插入數(shù)據(jù)的方法

MySQL中除了傳統(tǒng)的insert into插入數(shù)據(jù)外,我們還可以用load data  mysqlimport等方式導(dǎo)入數(shù)據(jù),也可以將其他表中的數(shù)據(jù)插入到某張表中,具體方法不做詳細(xì)描述。

2.3.2 MongoDB中插入數(shù)據(jù)

 MongoDB主要存儲(chǔ)的是文檔數(shù)據(jù),文檔的數(shù)據(jù)結(jié)構(gòu)和JSON基本一樣。所有存儲(chǔ)在集合中的數(shù)據(jù)都是BSON格式。BSON是一種類json的一種二進(jìn)制形式的存儲(chǔ)格式,簡(jiǎn)稱Binary JSON。

插入文檔

MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語(yǔ)法如下:

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.save(document)

1、簡(jiǎn)單的插入

db.winner.find() #插入前 MongoDB中用find查看以前的數(shù)據(jù)類似mysql中的select
> db.winner.insert({name:"linux"})
#插入結(jié)果
>db.winner.find()
{ "_id" : ObjectId("592bf6bf1b8e279c43cbb021"), "name" : "linux" }
>

2、定義變量

> SQLNAME=({"titile":"MongoDB學(xué)習(xí)實(shí)踐",
 description: "MongoDB是NoSql數(shù)據(jù)庫(kù)",
 by:"書籍學(xué)習(xí)"})
 
可以將我們要插入的數(shù)據(jù)定義成變量,后面使用加載變量的方式來實(shí)現(xiàn)數(shù)據(jù)的插入
> db.sql.insert(SQLNAME)

> db.sql.find()
{ "_id" : ObjectId("592bf8b5f3fed7ab45761fc1"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }
>

3、for循環(huán)插入

MongoDB還支持for(i=0;i<100;i++)db.winner2.insert({x:i})這種形式的數(shù)據(jù)插入。
for(i=0;i<100;i++)db.winner2.insert({x:i})for(i=0;i<100;i++)db.winner2.insert({x:i})
> db.winner2.find()db.winner2.find()
{ "_id" : ObjectId("592bfaa425e6a2cd19372da3"), "x" : 0 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da4"), "x" : 1 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da5"), "x" : 2 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da6"), "x" : 3 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da7"), "x" : 4 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da8"), "x" : 5 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372da9"), "x" : 6 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372daa"), "x" : 7 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372dab"), "x" : 8 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372dac"), "x" : 9 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372dad"), "x" : 10 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372dae"), "x" : 11 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372daf"), "x" : 12 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db0"), "x" : 13 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db1"), "x" : 14 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db2"), "x" : 15 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db3"), "x" : 16 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db4"), "x" : 17 }
{ "_id" : ObjectId("592bfaa425e6a2cd19372db5"), "x" : 18 }
#db.winner2.count() #統(tǒng)計(jì)數(shù)據(jù)條數(shù) 類似MySQL中的 select count(*) from tablename where *
100

2.3.3刪除數(shù)據(jù)

1、MySQL中刪除數(shù)據(jù)

 MySQL中刪除數(shù)據(jù)最常用的是delete結(jié)合where子句的方式,在清空表的時(shí)候可用truncate,delete不加限制條件時(shí)時(shí)刪除整個(gè)表的數(shù)據(jù),但是當(dāng)表中存在自增主鍵列時(shí),新增加的數(shù)據(jù)主鍵自增列不會(huì)從初始化數(shù)字開始,而是從之前被刪除的位置繼續(xù),而truncate是清空表,對(duì)整個(gè)表中的自增主鍵列重新初始化。

mysql> select count(*)  from winer;
+----------+
| count(*) |
+----------+
|      160 |
+----------+
1 row in set (0.03 sec)
mysql> select *  from  winer limit 10;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | MySQL  |  20 |   1 |
|  2 | MySQL  |  20 |   1 |
|  3 | Docker |   8 |   0 |
|  4 | MySQL  |  20 |   1 |
|  5 | Docker |   8 |   0 |
|  6 | MySQL  |  20 |   1 |
|  7 | MySQL  |  20 |   1 |
|  8 | Docker |   8 |   0 |
|  9 | MySQL  |  20 |   1 |
| 10 | Docker |   8 |   0 |
+----+--------+-----+-----+
10 rows in set (0.00 sec)
用delete刪除全部數(shù)據(jù)
mysql> delete  from  winer;
Query OK, 160 rows affected (0.01 sec)
再插入數(shù)據(jù)
mysql> insert into winer (name,age,sex) select name,age,sex  from winner2;
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0
#檢查數(shù)據(jù)的主鍵情況,確實(shí)是從之前的刪除前開始存儲(chǔ)的,而并不是重新開始。
mysql> select * from winer;
+-----+--------+-----+-----+
| id  | name   | age | sex |
+-----+--------+-----+-----+
| 249 | MySQL  |  20 |   1 |
| 250 | MySQL  |  20 |   1 |
| 251 | Docker |   8 |   0 |
| 252 | MySQL  |  20 |   1 |
| 253 | Docker |   8 |   0 |
+-----+--------+-----+-----+
5 rows in set (0.00 sec)
truncate 刪除檢查

mysql> truncate winer;
Query OK, 0 rows affected (0.09 sec)

mysql> insert into winer (name,age,sex) select name,age,sex  from winner2;
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from winer;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | MySQL  |  20 |   1 |
|  2 | MySQL  |  20 |   1 |
|  3 | Docker |   8 |   0 |
|  4 | MySQL  |  20 |   1 |
|  5 | Docker |   8 |   0 |
+----+--------+-----+-----+
5 rows in set (0.00 sec)
主鍵從1開始。
truncate 釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋放

2、MongoDB中刪除數(shù)據(jù)

MongoDB remove()函數(shù)是用來移除集合中的數(shù)據(jù)。在執(zhí)行remove()函數(shù)前先執(zhí)行find()命令來判斷執(zhí)行的條件是否正確,這是一個(gè)比較好的習(xí)慣。數(shù)據(jù)的刪除應(yīng)該是一個(gè)很嚴(yán)謹(jǐn)?shù)牟僮?,不能隨意的操作,無(wú)論是MySQL還是MongoDB,或者其他的數(shù)據(jù)庫(kù),我們都應(yīng)該養(yǎng)成這樣的良好習(xí)慣。嚴(yán)格條件限制、備份、謹(jǐn)慎等。

remove() 方法的基本語(yǔ)法格式如下所示:
db.collection.remove(
   ,
   
)
MongoDB 是 2.6 版本以后的,語(yǔ)法格式如下:
db.collection.remove(
   ,
   {
     justOne: ,
     writeConcern: 
   }
)
參數(shù)說明:
query :(可選)刪除的文檔的條件。
justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔。
writeConcern :(可選)拋出異常的級(jí)別
根據(jù)篩選條件 刪除部分?jǐn)?shù)據(jù)
> db.winner.find()db.winner.find()
{ "_id" : ObjectId("592c2e01c070fc0df2f50f09"), "x" : 0 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f0b"), "x" : 2 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f0c"), "x" : 3 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f0d"), "x" : 4 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f0e"), "x" : 5 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f0f"), "x" : 6 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f10"), "x" : 7 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f11"), "x" : 8 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f12"), "x" : 9 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f13"), "x" : 10 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f14"), "x" : 11 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f15"), "x" : 12 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f16"), "x" : 13 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f17"), "x" : 14 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f18"), "x" : 15 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f19"), "x" : 16 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f1a"), "x" : 17 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f1b"), "x" : 18 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f1c"), "x" : 19 }
{ "_id" : ObjectId("592c2e01c070fc0df2f50f1d"), "x" : 20 }
Type "it" for more
> db.winnerdb.winne.remove({x:20})

> db.winedb.winne.find({x:20})
刪除全部
 db.winner.remove()
 db.winner.find()
show tables;#檢查集合  或者使用show  collections
system.indexes
win_collection
winer
winner
由于MongoDB里面的集合不像MySQL里面的表還有結(jié)構(gòu)什么的,所以當(dāng)我們刪除所有數(shù)據(jù)時(shí),可以直接
刪除整個(gè)集合,當(dāng)下次插入數(shù)據(jù)時(shí),又會(huì)創(chuàng)建一個(gè)新的集合。
db.winner.drop()
> for(i=0;i<100;i++)db.winner.insert({x:i})for(i=0;i<100;i++)db.winner.insert({x:i})
> db.winner.find()db.winner.find()
{ "_id" : ObjectId("592c34bd17c668d64f637dab"), "x" : 25 }
{ "_id" : ObjectId("592c34bd17c668d64f637dac"), "x" : 26 }
{ "_id" : ObjectId("592c34bd17c668d64f637dad"), "x" : 27 }
{ "_id" : ObjectId("592c34bd17c668d64f637dae"), "x" : 28 }
{ "_id" : ObjectId("592c34bd17c668d64f637daf"), "x" : 29 }
{ "_id" : ObjectId("592c34bd17c668d64f637db0"), "x" : 30 }
{ "_id" : ObjectId("592c34bd17c668d64f637db1"), "x" : 31 }

> db.winner.drop()
true
> db.winner.find()
> show tables;
system.indexes
win_collection
winer
經(jīng)過對(duì)比,已經(jīng)刪除了之前的集合,但是這樣的刪除不會(huì)影響我們后面插入數(shù)據(jù)。
刪除重復(fù)文檔中的一條文檔
定義變量
SQLNAME=({"titile":"MongoDB學(xué)習(xí)實(shí)踐",
description: "MongoDB是NoSQL數(shù)據(jù)庫(kù)",
by:"書籍學(xué)習(xí)"})
增加數(shù)據(jù):
>db.winner2.insert(SQLNAME)
>db.winner2.insert(SQLNAME)
>db.winner2.insert(SQLNAME)
>db.winner2.find() #檢查所有的數(shù)據(jù)
{ "_id" : ObjectId("592c3628c1e073e087a335ee"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }
{ "_id" : ObjectId("592c362ac1e073e087a335ef"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }
{ "_id" : ObjectId("592c3639c1e073e087a335f0"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }
> 
執(zhí)行刪除
db.winner2.remove({"titile" : "MongoDB學(xué)習(xí)實(shí)踐"})
再次檢查 所有的結(jié)果全部刪除 
db.winner2.find()
> 
結(jié)合前面的語(yǔ)法

db.winner2.remove({"titile" : "MongoDB學(xué)習(xí)實(shí)踐"},1) 再查看數(shù)據(jù)只刪除了其中的一部分
db.winner2.find()
{ "_id" : ObjectId("592c391b30de16129bcc9310"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }
{ "_id" : ObjectId("592c391c30de16129bcc9311"), "titile" : "MongoDB學(xué)習(xí)實(shí)踐", "description" : "MongoDB是NoSQL數(shù)據(jù)庫(kù)", "by" : "書籍學(xué)習(xí)" }

2.3.4 更改數(shù)據(jù)

MySQL中更改數(shù)據(jù)主要通過update table  set  where之類的語(yǔ)句實(shí)現(xiàn),做一個(gè)簡(jiǎn)單的示例,不做詳細(xì)的描述。

mysql> select * from  winner2;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | MySQL  |  20 |   1 |
|  2 | MySQL  |  20 |   1 |
|  3 | Docker |   8 |   0 |
|  4 | MySQL  |  20 |   1 |
|  5 | Docker |   8 |   0 |
+----+--------+-----+-----+
5 rows in set (0.00 sec)

mysql> update  winner2   set name="MySQLDBA" where id=2; #將id為2的name更改為MySQLDBA
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from  winner2;
+----+----------+-----+-----+
| id | name     | age | sex |
+----+----------+-----+-----+
|  1 | MySQL    |  20 |   1 |
|  2 | MySQLDBA |  20 |   1 |
|  3 | Docker   |   8 |   0 |
|  4 | MySQL    |  20 |   1 |
|  5 | Docker   |   8 |   0 |
+----+----------+-----+-----+
5 rows in set (0.00 sec)

MongoDB中的數(shù)據(jù)更改也是通過update() 和 save() 實(shí)現(xiàn)的,需要注意的是,update()默認(rèn)更改適合條件的一條文檔記錄。

 update() 和 save() 

update() 方法用于更新已存在的文檔。語(yǔ)法格式如下:

db.collection.update(
   ,
   ,
   {
     upsert: ,
     multi: ,
     writeConcern: 
   }
)

參數(shù)說明:

query : update的查詢條件,類似sql update查詢內(nèi)where后面的。

update : update的對(duì)象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的

upsert : 可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。

multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄全部更新。

writeConcern :可選,拋出異常的級(jí)別。

save() 方法

save() 方法通過傳入的文檔來替換已有文檔。語(yǔ)法格式如下:
db.collection.save(
   ,
   {
     writeConcern: 
   }
)

參數(shù)說明:

document : 文檔數(shù)據(jù)。

writeConcern :可選,拋出異常的級(jí)別。

更多實(shí)例

只更新第一條記錄:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加進(jìn)去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );



網(wǎng)頁(yè)題目:MongoDB基礎(chǔ)知識(shí)(一)
文章出自:http://weahome.cn/article/ihihhh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部