日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小白必须懂的MongoDB的十大总结

發(fā)布時間:2025/3/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白必须懂的MongoDB的十大总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小白必須懂的MongoDB的總結(jié)

一、MongoDB的認(rèn)識

1、什么是MongoDB?

MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的開源產(chǎn)品,是最接近于關(guān)系型數(shù)據(jù)庫的 NoSQL 數(shù)據(jù)庫。它在輕量級JSON 交換基礎(chǔ)之上進行了擴展,即稱為 BSON 的方式來描述其無結(jié)構(gòu)化的數(shù)據(jù)類型。盡管如此它同樣可以存儲較為復(fù)雜的數(shù)據(jù)類型。它和上一篇文章講到的Redis有異曲同工之妙。雖然兩者均為 NoSQL ,但是 MongoDB 相對于 Redis 而言,MongoDB 更像是傳統(tǒng)的數(shù)據(jù)庫。早些年我們是先有了 Relation Database (關(guān)系型數(shù)據(jù)庫),然后出現(xiàn)了很多很復(fù)雜的query ,里面用到了很多嵌套,很多 join 操作。所以在設(shè)計數(shù)據(jù)庫的時候,我們也考慮到了如何應(yīng)用他們的關(guān)系,使得寫 query 可以使 database 效率達到最高。后來人們發(fā)現(xiàn),不是每個系統(tǒng),都需要如此復(fù)雜的關(guān)系型數(shù)據(jù)庫。有些簡單的網(wǎng)站,比如博客,比如社交網(wǎng)站,完全可以斬斷數(shù)據(jù)庫之間的一切關(guān)系。這樣做帶來的好處是,設(shè)計數(shù)據(jù)庫變得更加簡單,寫 query 也變得更加簡單。然后,query 消耗的時間可能也會變少。因為 query 簡單了,少了許多消耗資源的 join 操作,速度自然會上去。正如所說的, query 簡單了,很有以前 MySQL 可以找到的東西,現(xiàn)在關(guān)系沒了,通過 Mongo 找不到了。我們只能將幾組數(shù)據(jù)都抓到本地,然后在本地做 join ,所以在這點上可能會消耗很多資源。這里我們可以發(fā)現(xiàn)。如何選擇數(shù)據(jù)庫,完全取決于你所需要處理的數(shù)據(jù)的模型,即 Data Model 。如果它們之間,關(guān)系錯綜復(fù)雜,千絲萬縷,這個時候 MySQL 一定是首選。如果他們的關(guān)系并不是那么密切,那么, NoSQL 將會是利器。

MongoDB 和 Redis 一樣均為 key-value 存儲系統(tǒng),它具有以下特點:

  • 面向集合存儲,易存儲對象類型的數(shù)據(jù)。

  • 模式自由。

  • 支持動態(tài)查詢。

  • 支持完全索引,包含內(nèi)部對象。

  • 支持查詢。

  • 支持復(fù)制和故障恢復(fù)。

  • 使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等)。

  • 自動處理碎片,以支持云計算層次的擴展性

  • 支持 Python , PHP , Ruby , Java , C , C# , Javascript ,Perl 及 C++ 語言的驅(qū)動程序,社區(qū)中也提供了對 Erlang 及 .NET 等平臺的驅(qū)動程序。

  • 文件存儲格式為 BSON (一種 JSON 的擴展)。

  • 可通過網(wǎng)絡(luò)訪問。

2、MongoDB與MySQL性能比較

像 MySQL 一樣, MongoDB 提供了豐富的遠遠超出了簡單的鍵值存儲中提供的功能和功能。 MongoDB 具有查詢語言,功能強大的輔助索引(包括文本搜索和地理空間),數(shù)據(jù)分析功能強大的聚合框架等。相比使用關(guān)系數(shù)據(jù)庫而言,使用MongoDB ,您還可以使用如下表所示的這些功能,跨越更多樣化的數(shù)據(jù)類型和數(shù)據(jù)規(guī)模。

MySQLMongoDB
豐富的數(shù)據(jù)模型
動態(tài) Schema
數(shù)據(jù)類型
數(shù)據(jù)本地化
字段更新
易于編程
復(fù)雜事務(wù)
審計
自動分片

MySQL 中的許多概念在 MongoDB 中具有相近的類比。本表概述了每個系統(tǒng)中的一些常見概念。

MySQLMongoDB
集合
文檔
字段
joins嵌入文檔或者鏈接

3、應(yīng)用范圍和限制

MongoDB 的主要目標(biāo)是在 key-value (鍵/值)存儲方式(提供了高性能和高度伸縮性)以及傳統(tǒng)的 RDBMS 系統(tǒng)(豐富的功能)架起一座橋梁,集兩者的優(yōu)勢于一身。 MongoDB 適用范圍如下:

  • 網(wǎng)站數(shù)據(jù): Mongo 非常適合實時的插入,更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。

  • 緩存:由于性能很高, Mongo 也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由 Mongo 搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載。

  • 大尺寸,低價值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統(tǒng)的文件進行存儲。

  • 高伸縮性的場景: Mongo 非常適合由數(shù)十或數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。 Mongo 的路線圖中已經(jīng)包含對 MapReduce 引擎的內(nèi)置支持。

  • 用于對象及 JSON 數(shù)據(jù)的存儲: Mongo 的 BSON 數(shù)據(jù)格式非常適合文檔化格式的存儲及查詢。

MongoDB 當(dāng)然也會有以下場景的限制:

  • 高度事物性的系統(tǒng):例如銀行或會計系統(tǒng)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫目前還是更適用于需要大量原子性復(fù)雜事務(wù)的應(yīng)用程序。

  • 傳統(tǒng)的商業(yè)智能應(yīng)用:針對特定問題的 BI 數(shù)據(jù)庫會對產(chǎn)生高度優(yōu)化的查詢方式。對于此類應(yīng)用,數(shù)據(jù)倉庫可能是更合適的選擇。

  • 需要 SQL 的問題。

二、MongoDB的安裝

環(huán)境準(zhǔn)備

  • CentOS7

  • MongoDB 3.6

安裝步驟

1、創(chuàng)建一個 mongodb-org-3.6.repo 文件
vi /etc/yum.repos.d/mongodb-org-3.6.repo

在文件中加入如下內(nèi)容:

[mongodb-org-3.6] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

退出編輯模式,直接輸入如下命令安裝即可:

sudo yum install -y mongodb-org

若要安裝特定版本的 MongoDB ,請分別指定每個組件包并將版本號附加到包名稱,如下所示:

sudo yum install -y mongodb-org-3.6.3 mongodb-org-server-3.6.3 mongodb-org-shell-3.6.3 mongodb-org-mongos-3.6.3 mongodb-org-tools-3.6.3

你可以指定任何可用的 MongoDB 版本。然而, yum 會在新版本可用時升級軟件包。為防止意外升級,請釘住包裝。要固定軟件包,請將以下 exclude 指令添加到 /etc/yum.conf 文件中:

exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools

我們直接運行如下命令:

mongod -repair

看到如下字樣,說明我們安裝成功!

我們創(chuàng)建一個 db ,并查看下 mongo 的安裝位置:

mkdir db whereis mongod

安裝完成后啟動 mongodb ,并查看下 mongob 啟動狀態(tài):

systemctl start mongod.service systemctl status mongod.service

如果出現(xiàn)如下字樣,說明啟動成功!

成功啟動 MongoDB 后,新建一個命令行輸入 mongo 進行登錄操作,即可進行數(shù)據(jù)庫的一些操作了。

mongo

三、MongoDB數(shù)據(jù)類型及常用命令講解

MongoDB 的數(shù)據(jù)類型大致有下列幾種:

數(shù)據(jù)類型描述
String字符串。存儲數(shù)據(jù)常用的數(shù)據(jù)類型。在 MongoDB 中,UTF-8 編碼的字符串才是合法的。
Integer整型數(shù)值。用于存儲數(shù)值。根據(jù)你所采用的服務(wù)器,可分為 32 位或 64 位。
Boolean布爾值。用于存儲布爾值(真/假)。
Double雙精度浮點值。用于存儲浮點值。
Min/Max keys將一個值與 BSON (二進制的 JSON)元素的最低值和最高值相對比。
Arrays用于將數(shù)組或列表或多個值存儲為一個鍵。
Timestamp時間戳。記錄文檔修改或添加的具體時間。
Object用于內(nèi)嵌文檔。
Null用于創(chuàng)建空值。
Symbol符號。該數(shù)據(jù)類型基本上等同于字符串類型,但不同的是,它一般用于采用特殊符號類型的語言。
Date日期時間。用 UNIX 時間格式來存儲當(dāng)前日期或時間。你可以指定自己的日期時間:創(chuàng)建 Date 對象,傳入年月日信息。
Object ID對象 ID。用于創(chuàng)建文檔的 ID。
Binary Data二進制數(shù)據(jù)。用于存儲二進制數(shù)據(jù)。
Code代碼類型。用于在文檔中存儲 JavaScript 代碼。
Regular expression正則表達式類型。用于存儲正則表達式。

下面我們將介紹一些 MongoDB 的常用命令!

1、創(chuàng)建數(shù)據(jù)庫

use 數(shù)據(jù)庫名稱 :創(chuàng)建一個新的數(shù)據(jù)庫。注意:如果該數(shù)據(jù)庫不存在,則創(chuàng)建,如果該數(shù)據(jù)庫存在,則是切換
如果創(chuàng)建了數(shù)據(jù)庫,沒有任何的操作,則會自動刪除該數(shù)據(jù)庫

example:

> use stu switched to db stu
2、查看數(shù)據(jù)庫

show dbs :查看當(dāng)前有多少個數(shù)據(jù)庫

example:

> show dbs admin 0.000GB config 0.000GB local 0.000GB
3、創(chuàng)建集合

db.集合名.insert({}) :向集合里面,添加文檔。{} 里面是 json 的文檔。注意: mongodb 里面的集合是隱式創(chuàng)建,就是無需創(chuàng)建,直接使用。 db 表示顯示當(dāng)前所在的數(shù)據(jù)庫。

example:

> db.php.insert({"name":"xiaoming","age":20,"email":"xiaoming@gmail.com"}) WriteResult({ "nInserted" : 1 }) > db.php.insert({"name":"xiaohong","age":18,"email":"xiaohong@gmail.com"}) WriteResult({ "nInserted" : 1 })
4、查看集合

show tables :查看當(dāng)前數(shù)據(jù)庫中的集合

example:

> show tables php
5、查詢集合里面的文檔

db.集合名.find() :查詢當(dāng)前數(shù)據(jù)庫中該集合下的所有文檔

example:

> db.php.find() { "_id" : ObjectId("5b9318ac487b851e62879578"), "name" : "xiaoming", "age" : 20, "email" : "xiaoming@gmail.com" } { "_id" : ObjectId("5b9319a2487b851e62879579"), "name" : "xiaohong", "age" : 18, "email" : "xiaohong@gmail.com" }

db.集合名.find :查詢當(dāng)前數(shù)據(jù)庫中該集合下的第一個文檔

example:

> db.php.find function (query, fields, limit, skip, batchSize, options) {var cursor = new DBQuery(this._mongo,this._db,this,this._fullName,this._massageObject(query),fields,limit,skip,batchSize,options || this.getQueryOptions());{const session = this.getDB().getSession();const readPreference = session._serverSession.client.getReadPreference(session);if (readPreference !== null) {cursor.readPref(readPreference.mode, readPreference.tags);}const readConcern = session._serverSession.client.getReadConcern(session);if (readConcern !== null) {cursor.readConcern(readConcern.level);}}return cursor; }
6、刪除集合

db.集合名.drop() :刪除當(dāng)前數(shù)據(jù)庫中的集合

example:

> db.php.drop() true
7、刪除數(shù)據(jù)庫

db.dropDatabase() :刪除當(dāng)前的數(shù)據(jù)庫

> db.dropDatabase() { "dropped" : "stu", "ok" : 1 }
8、幫助命令

help :全局幫助命令

> helpdb.help() help on db methodsdb.mycoll.help() help on collection methodssh.help() sharding helpersrs.help() replica set helpershelp admin administrative helphelp connect connecting to a db helphelp keys key shortcutshelp misc misc things to knowhelp mr mapreduceshow dbs show database namesshow collections show collections in current databaseshow users show users in current databaseshow profile show most recent system.profile entries with time >= 1msshow logs show the accessible logger namesshow log [name] prints out the last segment of log in memory, 'global' is defaultuse set current databasedb.foo.find() list objects in collection foodb.foo.find( { a : 1 } ) list objects in foo where a == 1it result of the last line evaluated; use to further iterateDBQuery.shellBatchSize = x set default number of items to display on shellexit quit the mongo shell

db.help() :數(shù)據(jù)庫相關(guān)的幫助命令

example:

> db.help() DB methods:db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [just calls db.runCommand(...)]db.aggregate([pipeline], {options}) - performs a collectionless aggregation on this database; returns a cursordb.auth(username, password)db.cloneDatabase(fromhost)db.commandHelp(name) returns the help for the commanddb.copyDatabase(fromdb, todb, fromhost)db.createCollection(name, {size: ..., capped: ..., max: ...})db.createView(name, viewOn, [{$operator: {...}}, ...], {viewOptions})db.createUser(userDocument)db.currentOp() displays currently executing operations in the dbdb.dropDatabase()db.eval() - deprecateddb.fsyncLock() flush data to disk and lock server for backupsdb.fsyncUnlock() unlocks server following a db.fsyncLock()db.getCollection(cname) same as db['cname'] or db.cnamedb.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collectionsdb.getCollectionNames()db.getLastError() - just returns the err msg stringdb.getLastErrorObj() - return full status objectdb.getLogComponents()db.getMongo() get the server connection objectdb.getMongo().setSlaveOk() allow queries on a replication slave serverdb.getName()db.getPrevError()db.getProfilingLevel() - deprecateddb.getProfilingStatus() - returns if profiling is on and slow thresholddb.getReplicationInfo()db.getSiblingDB(name) get the db at the same server as this onedb.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if setdb.hostInfo() get details about the server's hostdb.isMaster() check replica primary statusdb.killOp(opid) kills the current operation in the dbdb.listCommands() lists all the db commandsdb.loadServerScripts() loads all the scripts in db.system.jsdb.logout()db.printCollectionStats()db.printReplicationInfo()db.printShardingStatus()db.printSlaveReplicationInfo()db.dropUser(username)db.repairDatabase()db.resetError()db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {cmdObj: 1}db.serverStatus()db.setLogLevel(level,)db.setProfilingLevel(level,slowms) 0=off 1=slow 2=alldb.setWriteConcern() - sets the write concern for writes to the dbdb.unsetWriteConcern() - unsets the write concern for writes to the dbdb.setVerboseShell(flag) display extra information in shell outputdb.shutdownServer()db.stats()db.version() current version of the server

db.集合名.help() :集合相關(guān)的幫助命令

example:

> db.php.help() DBCollection helpdb.php.find().help() - show DBCursor helpdb.php.bulkWrite( operations, ) - bulk execute write operations, optional parameters are: w, wtimeout, jdb.php.count( query = {}, ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMSdb.php.copyTo(newColl) - duplicates collection by copying all documents to newColl; no indexes are copied.db.php.convertToCapped(maxBytes) - calls {convertToCapped:'php', size:maxBytes}} commanddb.php.createIndex(keypattern[,options])db.php.createIndexes([keypatterns], )db.php.dataSize()db.php.deleteOne( filter, ) - delete first matching document, optional parameters are: w, wtimeout, jdb.php.deleteMany( filter, ) - delete all matching documents, optional parameters are: w, wtimeout, jdb.php.distinct( key, query, ) - e.g. db.php.distinct( 'x' ), optional parameters are: maxTimeMSdb.php.drop() drop the collectiondb.php.dropIndex(index) - e.g. db.php.dropIndex( "indexName" ) or db.php.dropIndex( { "indexKey" : 1 } )db.php.dropIndexes()db.php.ensureIndex(keypattern[,options]) - DEPRECATED, use createIndex() insteaddb.php.explain().help() - show explain helpdb.php.reIndex()db.php.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.e.g. db.php.find( {x:77} , {name:1, x:1} )db.php.find(...).count()db.php.find(...).limit(n)db.php.find(...).skip(n)db.php.find(...).sort(...)db.php.findOne([query], [fields], [options], [readConcern])db.php.findOneAndDelete( filter, ) - delete first matching document, optional parameters are: projection, sort, maxTimeMSdb.php.findOneAndReplace( filter, replacement, ) - replace first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocumentdb.php.findOneAndUpdate( filter, update, ) - update first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocumentdb.php.getDB() get DB object associated with collectiondb.php.getPlanCache() get query plan cache associated with collectiondb.php.getIndexes()db.php.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } )db.php.insert(obj)db.php.insertOne( obj, ) - insert a document, optional parameters are: w, wtimeout, jdb.php.insertMany( [objects], ) - insert multiple documents, optional parameters are: w, wtimeout, jdb.php.mapReduce( mapFunction , reduceFunction , )db.php.aggregate( [pipeline], ) - performs an aggregation on a collection; returns a cursordb.php.remove(query)db.php.replaceOne( filter, replacement, ) - replace the first matching document, optional parameters are: upsert, w, wtimeout, jdb.php.renameCollection( newName , ) renames the collection.db.php.runCommand( name , ) runs a db command with the given name where the first param is the collection namedb.php.save(obj)db.php.stats({scale: N, indexDetails: true/false, indexDetailsKey: , indexDetailsName: })db.php.storageSize() - includes free space allocated to this collectiondb.php.totalIndexSize() - size in bytes of all the indexesdb.php.totalSize() - storage allocated for all data and indexesdb.php.update( query, object[, upsert_bool, multi_bool] ) - instead of two flags, you can pass an object with fields: upsert, multidb.php.updateOne( filter, update, ) - update the first matching document, optional parameters are: upsert, w, wtimeout, jdb.php.updateMany( filter, update, ) - update all matching documents, optional parameters are: upsert, w, wtimeout, jdb.php.validate( ) - SLOWdb.php.getShardVersion() - only for use with shardingdb.php.getShardDistribution() - prints statistics about data distribution in the clusterdb.php.getSplitKeysForChunks( ) - calculates split points over all chunks and returns splitter functiondb.php.getWriteConcern() - returns the write concern used for any operations on this collection, inherited from server/db if setdb.php.setWriteConcern( ) - sets the write concern for writes to the collectiondb.php.unsetWriteConcern( ) - unsets the write concern for writes to the collectiondb.php.latencyStats() - display operation latency histograms for this collection

四、增刪改查操作

1、添加文檔

db.集合名.insert({k1:v1,k2:v2...}) :向當(dāng)前數(shù)據(jù)庫的該集合下添加文檔

我們在添加文檔的時候有如下注意點:

a) 文檔就是鍵值對,數(shù)據(jù)類型是 BSON 格式,支持的值更加豐富。 BSON 是 JSON 的擴展,新增了諸如日期,浮點等 JSON 不支持的數(shù)據(jù)類型。

b) 在添加的文檔里面,都有一個 '_id' 的鍵,值為對象類型 ObjectID ,在這里,我們解釋下 ObjectID 類型:

每個文檔都有一個 _id 字段,并且同一集合中的 _id 值唯一,該字段可以是任意類型的數(shù)據(jù),默認(rèn)是一個 ObjectID 對象。
ObjectID 對象數(shù)據(jù)組成:時間戳|機器碼|PID|計數(shù)器
_id 的鍵值我們可以自己輸入,但是不能重復(fù),但要注意的一點是在插入數(shù)據(jù)的時候,如果 _id 的值重復(fù)則會報錯

c) 可以使用 js 代碼來完成批量插入文檔

example:

> for(var i=1;i<=10;i++){ ... db.php.insert({'name':'xiaobai'+i,'age':i,'email':'xiaobai'+i+'@gmail.com'}) ... } WriteResult({ "nInserted" : 1 }) > db.php.find() { "_id" : ObjectId("5b931b74a39e4f4842ba36b3"), "name" : "xiaoming", "age" : 20, "email" : "xiaoming@gmail.com" } { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaohong", "age" : 18, "email" : "xiaohong@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36b5"), "name" : "xiaobai1", "age" : 1, "email" : "xiaobai1@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36b6"), "name" : "xiaobai2", "age" : 2, "email" : "xiaobai2@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36b7"), "name" : "xiaobai3", "age" : 3, "email" : "xiaobai3@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36b8"), "name" : "xiaobai4", "age" : 4, "email" : "xiaobai4@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36b9"), "name" : "xiaobai5", "age" : 5, "email" : "xiaobai5@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "name" : "xiaobai6", "age" : 6, "email" : "xiaobai6@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "name" : "xiaobai7", "age" : 7, "email" : "xiaobai7@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bc"), "name" : "xiaobai8", "age" : 8, "email" : "xiaobai8@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "name" : "xiaobai9", "age" : 9, "email" : "xiaobai9@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36be"), "name" : "xiaobai10", "age" : 10, "email" : "xiaobai10@gmail.com" }
2、刪除文檔

db.集合名.remove{(條件)} :刪除當(dāng)前數(shù)據(jù)庫下指定集合中滿足條件的文檔(不寫條件則刪除所有的文檔)

example:

> db.php.remove({age:20}) WriteResult({ "nRemoved" : 1 }) > db.php.remove({age:{'$lt':6}}) WriteResult({ "nRemoved" : 5 }) > db.php.find() { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaohong", "age" : 18, "email" : "xiaohong@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "name" : "xiaobai6", "age" : 6, "email" : "xiaobai6@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "name" : "xiaobai7", "age" : 7, "email" : "xiaobai7@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bc"), "name" : "xiaobai8", "age" : 8, "email" : "xiaobai8@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "name" : "xiaobai9", "age" : 9, "email" : "xiaobai9@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36be"), "name" : "xiaobai10", "age" : 10, "email" : "xiaobai10@gmail.com" }

這里我們在刪除 php 集合中年齡小于6的文檔時,我們使用了操作符來完成。

比較運算符

操作符效果
$gt大于
$lt小于
$gte大于等于
$lte小于等于
$exists存在與否
$in包含
$ne不等于
$nin不包含

邏輯運算符

操作符效果
$exists存在與否
$or或者
$and并且
$not不存在
$mod求模
$where位置

特別的 $exists: true 表示字段存在

排序 sort

操作效果
$asc升序
$desc降序
3、更新文檔

更新文檔有兩種方式進行修改

方法一、直接修改

db.集合名.update({條件},{新的文檔}) :修改當(dāng)前數(shù)據(jù)庫下指定集合中滿足條件的文檔信息

example:

> db.php.find() { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaohong", "age" : 18, "email" : "xiaohong@gmail.com" } > db.php.update({age:18},{name:'xiaobai5'}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.php.find() { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaobai5" }

db.集合.update(條件,新文檔,是否新增,是否修改多條) :修改當(dāng)前數(shù)據(jù)庫下指定集合中滿足條件的文檔信息

  • 是否新增:如果值是1(true)則沒有滿足條件的 則添加

  • 是否修改多條:若值是1(true),如果滿足條件的有多個文檔 則都要修改

example:

> db.php.update({age:10},{name:'xiaoli'},true,true) WriteResult({"nMatched" : 0,"nUpserted" : 0,"nModified" : 0,"writeError" : {"code" : 9,"errmsg" : "multi update only works with $ operators"} })

方法二、使用修改器

example:

我們要修改 age=6 的文檔名稱為 xiaosan ,并且其他鍵值不能丟失

我們可以使用修改器

  • $inc :加上一個數(shù)字

  • $set :修改某一個字段,如果該字段不存在就增這個字段

語法:db.集合名.update({條件},{修改器名稱:{修改的鍵:修改的新值}})

> db.php.update({age:6},{'$set':{name:'xiaosan'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

那如果我們要修改 age=10 的文檔的年齡增加十歲,我們可以這樣做:

> db.php.update({age:10},{$inc:{age:10}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
4、查詢文檔

語法: db.集合名.find({條件})

example:

取出 php 集合里面的第一個文檔

> db.php.findOne() { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaobai5" }

取出 php 集合里面 age=6 的文檔

> db.php.find({age:6}) { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "name" : "xiaosan", "age" : 6, "email" : "xiaobai6@gmail.com" }

取出 php 集合里面 age>8 的文檔

> db.php.find({age:{'$gt':8}}) { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "name" : "xiaobai9", "age" : 9, "email" : "xiaobai9@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36be"), "name" : "xiaobai10", "age" : 20, "email" : "xiaobai10@gmail.com" }

取出 php 集合里面的文檔,只顯示 name 鍵

> db.php.find({},{age:1})//1表示只顯示age鍵值 { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4") } { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "age" : 6 } { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "age" : 7 } { "_id" : ObjectId("5b931dfba39e4f4842ba36bc"), "age" : 8 } { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "age" : 9 } { "_id" : ObjectId("5b931dfba39e4f4842ba36be"), "age" : 20 } > db.php.find({},{age:0})//1表示除了顯示age鍵值,其他的都顯示 { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaobai5" } { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "name" : "xiaosan", "email" : "xiaobai6@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "name" : "xiaobai7", "email" : "xiaobai7@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bc"), "name" : "xiaobai8", "email" : "xiaobai8@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "name" : "xiaobai9", "email" : "xiaobai9@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36be"), "name" : "xiaobai10", "email" : "xiaobai10@gmail.com" }

根據(jù)年齡的(降序|升序)來顯示文檔

db.集合名.find().sort({age:1})根據(jù)年齡升序 db.集合名.find().sort({age:0})根據(jù)年齡降序

顯示 php 集合中的前三個文檔

> db.php.find().limit(3) { "_id" : ObjectId("5b931b7ca39e4f4842ba36b4"), "name" : "xiaobai5" } { "_id" : ObjectId("5b931dfba39e4f4842ba36ba"), "name" : "xiaosan", "age" : 6, "email" : "xiaobai6@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "name" : "xiaobai7", "age" : 7, "email" : "xiaobai7@gmail.com" }

顯示 php 集合中的第三個文檔到第五個文檔

> db.php.find().skip(2).limit(3) { "_id" : ObjectId("5b931dfba39e4f4842ba36bb"), "name" : "xiaobai7", "age" : 7, "email" : "xiaobai7@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bc"), "name" : "xiaobai8", "age" : 8, "email" : "xiaobai8@gmail.com" } { "_id" : ObjectId("5b931dfba39e4f4842ba36bd"), "name" : "xiaobai9", "age" : 9, "email" : "xiaobai9@gmail.com" }

統(tǒng)計 php 集合中文檔的個數(shù)

db.集合名.count():返回集合中有多少個文檔

五、用戶管理(權(quán)限控制)

1、權(quán)限概述

在 MongoDB 里面的用戶是屬于數(shù)據(jù)庫的,每個數(shù)據(jù)庫都有自己的管理員。管理員登錄后,只能操作所屬的數(shù)據(jù)庫。注意:在 admin 的數(shù)據(jù)庫中創(chuàng)建的用戶是超級管理員,登陸后可以操作任何的數(shù)據(jù)庫

2、創(chuàng)建用戶

(1) 選擇數(shù)據(jù)庫

use 數(shù)據(jù)庫的名稱

(2) 添加用戶

db.createUser(用戶名,密碼,是否只讀)

第三個參數(shù)"是否只讀"默認(rèn)是 false ,創(chuàng)建的用戶可以執(zhí)行讀寫,如果是 true ,則創(chuàng)建的用戶只能查詢,不能修改。

注意點:在創(chuàng)建用戶之前,必須先創(chuàng)建一個超級管理員

example:

> use admin switched to db admin > db.createUser({user:'user', ... pwd:'passwd', ... roles:[ ... {role:'userAdminAnyDatabase', db:'admin'} ... ] ... }) Successfully added user: {"user" : "user","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}] }
3、驗證權(quán)限(用戶登錄)

在添加完成管理員之后,我們做如下操作:

(1) 如果你是安裝成windows服務(wù)的方式安裝的,則卸載服務(wù),在安裝時添加一個 -auth 選項,auth 表示要開啟權(quán)限認(rèn)證

(2) 如果你是直接啟動的方式,則停止服務(wù),重新啟動,在啟動時也要添加 --auth 選項,auth 表示要開啟權(quán)限認(rèn)證

如果沒有通過權(quán)限驗證,直接操作數(shù)據(jù)庫,則報如下錯誤提示:

error: {"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1","code" : 10057 }

如何通過權(quán)限驗證

  • 選擇數(shù)據(jù)庫

  • 執(zhí)行db.auth (用戶名,密碼)

  • 4、刪除用戶和修改密碼

    注意:創(chuàng)建的用戶名和密碼是存儲在各自數(shù)據(jù)庫里面的 system.users 集合里面的。想要刪除用戶,則直接刪除 system.users 集合里面的文檔即可

    5、總結(jié)說明

    a) 非 admin 數(shù)據(jù)庫的用戶不能使用數(shù)據(jù)庫命令,比如 show dbs 等

    (b) admin 數(shù)據(jù)庫中的用戶被視為超級用戶(即管理員),在認(rèn)證之后,管理員可以讀寫所有數(shù)據(jù)庫,執(zhí)行特定的管理命令。

    (c) 在開啟安全檢查之前,一定要至少有個管理員賬戶。

    (d) 數(shù)據(jù)庫的用戶賬號以文檔的形式存儲在 system.users 集合里面。可以在 system.users 集合中刪除用戶賬號文檔,就可以刪除用戶。

    六、MongoDB中的索引

    1、普通單列索引

    我們用如下代碼來測試:

    for(var i=0;i<200000;i++){db.java.insert({name:'xiao'+i,age:i}) }

    第一、我們先檢驗一下查詢性能

    var start=new Date() db.java.find({name:'xiao156789'}) var end=new Date() end-start 17510

    第二、為 name 創(chuàng)建索引

    > db.java.ensureIndex({name:1}) {"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter" : 2,"ok" : 1 }

    第三、再執(zhí)行第一部分代碼可以看出有數(shù)量級的性能提升

    語法:db.集合名.ensureIndex({鍵名:1}) :1是升序,-1是降序

    2、多列索引(復(fù)合索引)

    創(chuàng)建多列索引
    語法:db.集合名.ensureIndex({field1:1/-1,field2:1/-1})
    對 name 和 age 建立一個復(fù)合索引,可以使用 db.集合名.getIndexes() 查看創(chuàng)建的索引情況

    3、子文檔索引

    語法: db.集合名.ensureIndex({field.subfield:1/-1})
    如下文檔可以建立子文檔索引

    {name:'諾基亞手機1',price:12.34,spc:{weight:100,area:'紐約'}} {name:'諾基亞手機2',price:42.34,spc:{weight:200,area:'倫敦'}}

    比如要查詢 weight=100 的文檔

    db.goods.find({'spc.weight':100})

    根據(jù)當(dāng)前案例,我們建立子文檔索引

    db.net.ensureIndex({'spc.w':1})

    4、唯一索引

    語法: db.集合名.ensureIndex({name:-1},{unique:true})

    5、查看索引

    (1) 查看當(dāng)前索引狀態(tài): db.集合名.getIndexes()

    (2) 詳情查看本次查詢使用哪個索引和查詢數(shù)據(jù)的狀態(tài)信息: db.集合名.find({name:''xiao}).explain()

    6、刪除索引

    刪除單個索引: db.集合名.dropIndex({filed:1/-1})

    刪除所有索引: db.集合名.dropIndexes()

    7、重建索引

    一個表經(jīng)過很多次修改后,導(dǎo)致表的文件產(chǎn)生空洞,索引文件也如此,可以通過索引的重建,減少索引文件碎片,并提高索引的效率,類似 mysql 中的 optimize table 。

    mysql 里面使用 optimize table 語法: optimize table 表名

    語法: db.集合名.reIndex()

    8、索引使用注意事項

    (1) 創(chuàng)建索引的時候,注意1是正序創(chuàng)建索引,-1是倒序創(chuàng)建索引

    (2) 索引的創(chuàng)建在提高查詢性能的同時會影響插入性能,對于經(jīng)常查詢少插入

    (3) 復(fù)合索引要注意索引的先后順序

    (4) 每個鍵全建立索引不一定就能提高性能,索引不是萬能的。

    (5) 在做排序工作的時候如果是超大數(shù)據(jù)量也可以考慮加上索引用來提高排序的性能。

    八、MongoDB中的數(shù)據(jù)導(dǎo)出與導(dǎo)出

    利用mongoexport

    • -h host主機

    • -port 端口

    • -d 指明使用的庫

    • -o 指明要導(dǎo)出的文件名

    • -csv 指定導(dǎo)出的csv格式

    • -q 過濾導(dǎo)出

    • -f field1 field2 列名

    • -u username 用戶名

    • -p password 密碼

    注意:在使用用戶名和密碼是超級管理員的時候,如果端口是默認(rèn)的可以不使用-port來指定端口

    (2) 導(dǎo)入數(shù)據(jù)

    • -d 待導(dǎo)入的數(shù)據(jù)庫

    • -c 待導(dǎo)入的集合(不存在會自己創(chuàng)建)

    • -type csv/json(默認(rèn))

    • -file 備份文件路徑

    例如:導(dǎo)入json

    ./bin/mongoimport -h -port 端口號 -d test -c goods -file ./goodsall.json

    導(dǎo)入csv

    ./bin/mongoimport -h -port 端口號 -d test -c goods -type csv -f goods.id,goods.name -file ./goodsall.csv./bin/mongoimport -h -port 端口號 -d test -c goods -type csv -f -headline -f goods.id,goods.name -file ./goodsall.csv

    九、主從復(fù)制(讀寫分離)

    主從復(fù)制是一個簡單的數(shù)據(jù)庫同步備份的集群技術(shù),至少兩臺數(shù)據(jù)庫服務(wù)器,可以分別設(shè)置主服務(wù)器和從服務(wù)器,對主服務(wù)器的任何操作都會同步到從服務(wù)器上。

    實現(xiàn)的注意點

    1、在數(shù)據(jù)庫集群中要明確的知道誰是主服務(wù)器,主服務(wù)器只有一臺

    2、從服務(wù)器要知道自己的數(shù)據(jù)源 也就是對應(yīng)的主服務(wù)是誰

    3、--master用來確定主服務(wù)器 --slave和--source來控制從服務(wù)器

    配置步驟

    (1) 啟動主服務(wù)器

    (2) 啟動從服務(wù)器

    (3) 客戶端登錄到主服務(wù)器

    添加一些數(shù)據(jù),測試是否同步到從服務(wù)器,在主服務(wù)器里面,添加了一些文檔:

    第一步,客戶端登錄到主服務(wù)器,添加一些文檔

    第二步,登錄到從服務(wù)器,查看是否有數(shù)據(jù),如果有數(shù)據(jù),則成功了!

    十、php操作MongoDB

    1、安裝擴展

    注意:擴展文件,下載合適的php_mongodb.dll文件

    1) php的版本

    2) 是否是線程安全的thread safe(ts)

    3) 是vc幾的

    4) php是32位的還是64位的

    步驟

    1) 把對應(yīng)的擴展,拷貝到PHP的安裝目錄里面的ext目錄下面,注意:拷貝后改名為php_mongo.dll,方便管理

    2) 打開php.ini文件,引入該擴展

    extension=php_mongo.dll

    3) 重啟Apache,使用phpinfo()函數(shù)測試

    2、入門使用

    1) 連接mongodb服務(wù)器

    $m=new MongoClient("mongodb://root:root@localhost:8888/admin"); $db=$m->selectDb("stu");//選擇數(shù)據(jù)庫

    2) 增刪改查用法

    增刪改查

    注意,在命令行里面的"." 變成了"->","{}"變成了數(shù)組

    a) 添加一個文檔

    $db->php->insert(array('name'=>'李元霸','age'=>12));

    b) 查詢文檔

    $data=$db->php->find();

    查詢年齡等于9的文檔:

    $data=$db->php->find(array('age'=>9));

    查詢年齡大于9的文檔:

    //db.php.find({age:{'$gt':9}}) $data=$db->php->find(array('age'=>array('$gt':9)));

    根據(jù)年齡降序顯示:

    $data=$db->php->find()->sort(array('age'=>1)); foreach($data as $v){echo $v['name'].'----'.$v['age'].'--'.$v['email'].''; }

    c) 修改文檔,我們直接使用修改器來完成

    把年齡等于8的名稱改名為李白:

    //db.php.update({age:8},{'$set':{'name':'李白'}}) $db->php->update(array('age'=>8),array('$set'=>array('name'=>'李白'));

    d) 刪除文檔

    比如刪除年齡等于10的文檔:

    //db.php.remove({age:10}) $db->php->remove(array('age'=>10)) $data=$db->php->find() foreach($data as $v){echo $v['name'].'----'.$v['age'].'--'.$v['email'].''; }

    3) 把mysql表里面的數(shù)據(jù)存儲到mongodb里面

    selectDb("stu");//選擇數(shù)據(jù)庫 //從mysql里面取出數(shù)據(jù) $conn=mysql_connect('localhost','root','root'); mysql_query('use shop'); mysql_query('set names utf8'); $sql="select * from goods"; $res=mysql_query($sql); while($row=mysql_fetch_assoc($res)){$db->goods->insert($row); } echo 'ok';

    轉(zhuǎn)載于:https://www.cnblogs.com/ECJTUACM-873284962/p/9613236.html

    總結(jié)

    以上是生活随笔為你收集整理的小白必须懂的MongoDB的十大总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    91精品国产福利在线观看 | 99婷婷| 国产在线日本 | 五月婷婷丁香色 | www久久九 | 激情五月色播五月 | 人人干人人超 | 国产精品久久久久久久久久久杏吧 | 乱子伦av| 夜夜干夜夜 | 国产小视频免费观看 | 久久不射影院 | 在线观看电影av | 91刺激视频 | 欧美精品久久久久久 | 四虎成人在线 | 99国产一区二区三精品乱码 | 久久人人爽人人片av | 五月婷综合 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 一区二区三区福利 | 一区二区三区在线不卡 | 热精品 | 久久精品视 | 国产一区精品在线观看 | 亚洲更新最快 | 麻豆av电影 | 日韩视频二区 | 久久成人免费 | 99国产视频在线 | 一级免费黄视频 | 日韩欧三级 | 亚洲精品xx | 亚洲高清在线 | 伊人小视频 | 国产亚洲精品久久久久久大师 | 国产青春久久久国产毛片 | 不卡的av在线 | 久久国产精品网站 | 一区二区三区在线看 | 99草视频 | 麻豆视频免费在线观看 | 国产91丝袜在线播放动漫 | 亚洲国产一区二区精品专区 | 婷婷九月丁香 | 日韩视频免费观看高清 | 成人av电影免费观看 | 久久久高清| 久久免费高清 | 欧美a视频 | 最新日韩在线 | 97超碰人人看 | 午夜三级影院 | 成人va视频 | 去看片 | 亚洲国产中文字幕 | 日韩中出在线 | 99精品视频一区二区 | 久久精品91视频 | 麻豆久久久久久久 | 亚洲最新av在线 | 国产精品国产精品 | 久久久久久久久久久久99 | 亚洲精品xxxx | 国产精品一区久久久久 | 国产成人精品一区二区三区福利 | 国产精品美女视频 | 国产高清亚洲 | 绯色av一区 | 免费日韩av片 | 免费在线观看成人av | 色综合久久88 | 男女啪啪免费网站 | 免费黄色一区 | 久久人人97超碰国产公开结果 | 亚洲精品影视在线观看 | 欧美人交a欧美精品 | 色婷婷国产精品 | 日韩成人免费在线观看 | 国产一区二区免费 | va视频在线观看 | 亚洲国产精品人久久电影 | 麻豆精品传媒视频 | 久久99国产综合精品免费 | 亚洲欧美日本国产 | 久久精品79国产精品 | 99精品国产99久久久久久福利 | 亚洲另类人人澡 | 免费观看视频的网站 | 最近中文国产在线视频 | 91精品成人 | 天天草天天爽 | 天天爽天天碰狠狠添 | 成人午夜电影免费在线观看 | 国产精品麻豆三级一区视频 | 久久久91精品国产 | 免费av免费观看 | 91视频 - 88av | 亚州中文av | 国产免费美女 | 2019免费中文字幕 | 涩涩网站在线看 | 免费av大片 | 午夜精品久久久久久久99无限制 | 中文字幕人成一区 | 18国产精品白浆在线观看免费 | 五月天久久激情 | 91精品在线免费视频 | 手机看片国产 | 亚洲国产欧洲综合997久久, | 国产精品久久久久久久久久久免费看 | 黄色a级片在线观看 | 狠狠色噜噜狠狠狠狠2021天天 | 久久99精品视频 | 精品人妖videos欧美人妖 | 免费在线播放 | 伊人官网 | 狠狠躁夜夜躁人人爽超碰91 | 日本久久精品 | 黄色一级大片在线观看 | 少妇精69xxtheporn | 91av原创 | 91在线精品播放 | 91精品国产乱码久久桃 | 中文字幕在线网址 | av在线影片 | 欧美高清成人 | 久久av高清 | 久久综合给合久久狠狠色 | 婷婷激情小说网 | 亚洲黄色一级视频 | 国产日韩视频在线观看 | 欧美精品久久久久久久 | 超碰个人在线 | 欧美国产日韩在线视频 | japanesefreesex中国少妇 | 97超碰人人澡人人爱 | 久久国产欧美日韩 | 中文字幕高清有码 | 日韩欧美在线中文字幕 | 婷婷激情站 | 色婷婷激情电影 | 日韩精品久久中文字幕 | 97精品视频在线播放 | 国产精品福利在线观看 | 伊人开心激情 | 奇米网在线观看 | 欧美一区二区日韩一区二区 | 国产精品久久一区二区三区, | 国产欧美最新羞羞视频在线观看 | 91人人澡 | 精品国产网址 | 免费视频你懂的 | 最新中文字幕在线播放 | 一区二区中文字幕在线观看 | 人人澡人人爽欧一区 | 91精品电影 | 91久久精品一区 | 日韩精品电影在线播放 | 亚洲亚洲精品在线观看 | 美女黄频在线观看 | 免费日韩视频 | 在线国产91 | 91视频久久 | 久久久久久久久影视 | 中文字幕高清免费日韩视频在线 | av在线播放亚洲 | 欧美色噜噜 | 日韩免费一区 | a视频在线看| 97精品国产97久久久久久 | 国产精品ⅴa有声小说 | 日韩免费久久 | 国产日韩欧美在线观看 | 97综合在线 | 亚洲精品在线播放视频 | 97在线影视| 国产精品久久久久av福利动漫 | www.天天射 | 最新av免费在线 | 国产日韩在线一区 | 亚洲国产精品激情在线观看 | 黄色小说视频网站 | 成人性生交大片免费看中文网站 | 视频二区在线 | 亚洲电影图片小说 | 欧美一区二区伦理片 | 精品国产伦一区二区三区观看体验 | 国产亚洲精品电影 | 久草在线视频新 | 亚州免费视频 | 精品在线免费观看 | 高清av免费一区中文字幕 | 天天色天天操天天爽 | 免费成人结看片 | 69国产精品成人在线播放 | 日韩一级电影网站 | 91桃色在线观看视频 | 欧日韩在线视频 | 爱射综合 | 99精品视频精品精品视频 | 国产精品麻豆99久久久久久 | 午夜在线观看一区 | 色综合久久久久久中文网 | 国产人成精品一区二区三 | 在线国产高清 | 日韩3区 | 欧美韩国日本在线观看 | 久久激情视频 久久 | 狠狠干综合网 | 国产69精品久久99不卡的观看体验 | 久久久久蜜桃 | 欧美性爽爽 | 在线观看网站黄 | 人人爽人人爽人人爽学生一级 | 91精品国产高清自在线观看 | 日韩视频一区二区在线 | 亚洲精品国产成人 | 精品国产伦一区二区三区观看说明 | 精品国产中文字幕 | 伊人狠狠干 | 国产日韩精品在线观看 | 字幕网资源站中文字幕 | 亚洲天天做 | 超碰国产在线观看 | 深爱五月激情网 | 亚州av网站 | 久久综合色影院 | 91麻豆精品国产91久久久久久久久 | 亚洲成人免费 | www.色婷婷 | 国产精品成人免费精品自在线观看 | 搡bbbb搡bbb视频 | 国产精彩视频一区 | 人人要人人澡人人爽人人dvd | 免费看的黄色小视频 | 中文字幕免费不卡视频 | 国产精品入口麻豆 | 国产免费又粗又猛又爽 | 黄色网址a | 久久97久久| 色噜噜狠狠狠狠色综合 | 免费成人结看片 | 日日精品 | 一本之道乱码区 | 欧美二区在线播放 | 亚洲aⅴ在线观看 | 天天做天天干 | 久久久福利视频 | 欧美日韩一区二区免费在线观看 | 日韩视频免费观看高清完整版在线 | 亚洲有 在线 | 九九免费在线观看 | 婷婷丁香自拍 | 欧美久久久久 | 九九免费精品 | 亚洲精品在线观看视频 | 蜜桃视频日本 | 色吊丝av中文字幕 | 成 人 黄 色 片 在线播放 | 久久 国产一区 | 蜜臀久久99精品久久久无需会员 | 久久久99精品免费观看乱色 | 91精品国产综合久久婷婷香蕉 | 久久久视频在线 | 超碰在线人人艹 | 一级黄色片在线免费观看 | 国产精品3区| 一区二区三区在线视频111 | 九九免费在线视频 | 又黄又刺激视频 | 中文字幕在线观看第一区 | 久久精品美女视频网站 | 亚洲丝袜中文 | 国产永久免费 | 四虎www. | 欧美日韩不卡在线观看 | 精品亚洲一区二区三区 | 夜色资源站wwwcom | 人人精品久久 | av导航福利 | 亚洲在线视频观看 | 国产视频一区在线免费观看 | 免费a v视频 | 日本精品视频一区 | 夜夜视频 | www.日日日.com| 国产资源中文字幕 | 狠狠色丁香久久综合网 | 在线观看视频一区二区 | 亚洲精品视频免费 | 成年人在线免费看 | 久久五月情影视 | 91成人国产 | 成人一区二区在线观看 | 亚洲精品视频在线免费 | 在线激情电影 | 99视频网站| 久久精品专区 | 午夜精品一区二区三区在线播放 | 国产亚洲精品久久久久秋 | av免费电影在线观看 | 国产1区2区3区精品美女 | 丁香视频免费观看 | 黄p网站在线观看 | 久久久久久蜜桃一区二区 | 日韩欧美在线一区 | 99久高清在线观看视频99精品热在线观看视频 | 色狠狠狠 | 免费看黄在线观看 | 午夜精品区 | 久久污视频 | www色网站| 人人玩人人添人人澡超碰 | 成人h视频在线播放 | 成年人电影免费在线观看 | 美女黄频视频大全 | 国产精品视频久久久 | 日韩免费一级a毛片在线播放一级 | 国产又粗又猛又爽又黄的视频免费 | 国语自产偷拍精品视频偷 | 久久久久 | 亚洲精品一区二区三区新线路 | 日韩精品专区在线影院重磅 | 午夜精品区 | 黄网站色视频免费观看 | 91精品办公室少妇高潮对白 | 一区二区三区四区在线免费观看 | 久久理论电影 | 国产精品日韩久久久久 | 中文字幕91在线 | www国产亚洲精品 | 久久视频在线观看中文字幕 | 免费在线激情电影 | 日韩在线二区 | 五月婷婷网站 | 国产一区二区影院 | 亚洲美女视频网 | 日本韩国精品一区二区在线观看 | 狠狠干激情 | 久久在现视频 | 91精品啪啪 | 免费在线a| 九九热精| 亚州性色| 欧美精品乱码久久久久久 | 免费在线观看a v | 99久久精品无码一区二区毛片 | 婷婷国产v亚洲v欧美久久 | 久久美女视频 | 在线播放视频一区 | 精品欧美一区二区三区久久久 | 欧美一区二区免费在线观看 | 456成人精品影院 | 国产极品尤物在线 | 成人h在线 | 一级黄色视屏 | 午夜久久福利影院 | 一区二区视频播放 | 最新国产在线 | 久久精品99视频 | 日日碰狠狠躁久久躁综合网 | 久久艹艹 | 99精品视频一区二区 | 狠狠干夜夜操天天爽 | 亚洲在线视频观看 | 国产91精品一区二区麻豆亚洲 | 91视频久久久 | 国产精品入口a级 | 亚洲在线免费视频 | 久久第四色 | 久久久精品 一区二区三区 国产99视频在线观看 | 国产经典av | 免费观看www7722午夜电影 | 亚洲欧洲精品视频 | 伊人资源站 | 91毛片视频| 涩涩爱夜夜爱 | 国产成人高清在线 | 久久久免费看视频 | 国产69久久久欧美一级 | 久久看毛片 | 免费高清在线一区 | 丁香视频全集免费观看 | 日韩1页 | 不卡电影一区二区三区 | 91香蕉久久| 毛片精品免费在线观看 | 成人午夜网 | 久久久99精品免费观看乱色 | 国产成人精品国内自产拍免费看 | 九月婷婷综合网 | 国产精品日韩在线 | 99精品视频免费 | 在线一级片 | 久久国产精品一二三区 | 91成人免费看 | 天天综合人人 | 视频在线在亚洲 | 天天干天天做 | 色视频网站免费观看 | 中文字幕亚洲精品在线观看 | 国产精品毛片久久久 | 国产在线va | 又黄又刺激的网站 | 中国一级片视频 | 亚洲小视频在线观看 | 亚洲国产成人精品久久 | 国产精品一区二区三区久久 | 国产视频2 | www黄色com| 国产传媒一区在线 | 综合色中色 | 色av资源网| 日日干激情五月 | 久久情侣偷拍 | 麻花天美星空视频 | 天天透天天插 | 欧美精品视| 香蕉日日 | 国产99re | 免费在线一区二区三区 | 精品美女在线视频 | 中文字幕精品三级久久久 | 国产精品成久久久久 | 国产精品一区二区麻豆 | 成人国产精品久久久 | 欧美在线一二 | 亚洲精品在线视频观看 | 一区二区三区精品久久久 | 在线中文字幕播放 | 91久久久久久久 | av大片免费在线观看 | 91av在| 欧美性色19p| 亚洲免费在线播放视频 | av一级网站| 亚洲精品综合久久 | 91理论片午午伦夜理片久久 | av网站在线观看播放 | 500部大龄熟乱视频 欧美日本三级 | 成年人免费观看在线视频 | 成人黄色小说网 | 久久久久久看片 | 欧美一区二区在线看 | 99精品免费久久久久久久久 | 婷婷丁香综合 | 波多野结衣在线中文字幕 | 韩国av免费在线 | 天天干,天天射,天天操,天天摸 | 91看片淫黄大片一级在线观看 | www.久久成人 | 色综合天天综合 | 99热国产在线 | 欧美一区二区免费在线观看 | 日本护士三级少妇三级999 | 欧美综合在线视频 | 天天干天天操av | 久久免费视频一区 | 国产精品日韩久久久久 | 日韩二区在线 | 91av播放| 亚洲激情校园春色 | 日韩精品一卡 | 国产成人久久av | 色丁香综合 | 五月婷在线播放 | 国产日韩精品一区二区在线观看播放 | 四虎影视精品 | 午夜国产福利在线 | 色偷偷97 | 国产在线一区二区三区播放 | 国产成人免费av电影 | www国产亚洲精品久久网站 | 成年人在线播放视频 | 国内精品久久久久久久影视麻豆 | 天天干,天天干 | 日本黄色a级大片 | 狠狠色2019综合网 | 涩涩网站在线观看 | 日韩欧美一区二区在线播放 | 91成人黄色 | 99热这里精品 | 日日麻批40分钟视频免费观看 | 91亚瑟视频| 玖玖精品视频 | 香蕉蜜桃视频 | 亚洲成免费 | 中文字幕一区二区在线播放 | 亚洲一区二区视频在线 | 久久a久久 | 中文字幕国产一区二区 | 国产精品成人一区二区三区吃奶 | 久久免费视频播放 | 国产视频一区在线播放 | 视频 天天草 | 亚洲国产欧美在线看片xxoo | 国产精品免费一区二区 | 亚洲精品麻豆视频 | 制服丝袜一区二区 | 国产特级毛片aaaaaa | 国产成人一区二区三区在线观看 | 久久久这里有精品 | 天天做日日爱夜夜爽 | 黄色小说免费观看 | 精品免费99久久 | 久久亚洲私人国产精品 | 午夜久操 | 国产一区网址 | 99免费观看视频 | 在线看片视频 | 精品麻豆| 亚洲精品乱码白浆高清久久久久久 | 亚洲综合导航 | 成人动漫视频在线 | 99精品免费久久久久久日本 | 亚洲区精品 | 国产99在线免费 | 国产精品一区二区三区久久 | 一区二区三区动漫 | 成人va在线观看 | 91完整版观看 | 国产黄在线看 | 久久精品黄| 黄色三级久久 | 色资源在线| 久久精品久久99 | 欧美一级免费片 | 国产伦理久久 | 免费涩涩网站 | 天天爱天天色 | 在线看岛国av | 久久久久久久久网站 | 国产精品久久久久久五月尺 | 欧美性生活大片 | 人人超在线公开视频 | 国偷自产中文字幕亚洲手机在线 | 国产亚洲一区二区在线观看 | 国产又黄又爽又猛视频日本 | 欧美成人基地 | 久久综合九色综合97_ 久久久 | 国产精品视频最多的网站 | 九九视频精品免费 | 亚洲女裸体| 亚洲一区美女视频在线观看免费 | 色诱亚洲精品久久久久久 | 在线免费观看视频一区二区三区 | 中文字幕亚洲欧美日韩2019 | 国产99在线| 日本中文字幕在线看 | 黄色av网站在线免费观看 | 国产一卡二卡四卡国 | 超碰在线94 | 亚洲国产中文字幕 | 国产一区二区三区网站 | 少妇做爰k8经典 | 欧美另类重口 | 国内精品久久久久影院一蜜桃 | 日韩精品一区二区免费视频 | 日韩免费视频网站 | 成人久久久电影 | 99精品黄色| 一级黄色av| 日韩在线视频免费播放 | 91成人免费 | 国产精品女同一区二区三区久久夜 | 国产亚洲va综合人人澡精品 | www操操| 日本成址在线观看 | 黄色免费视频在线观看 | 六月天综合网 | 91高清一区| 在线观看mv的中文字幕网站 | 91成人在线视频 | 久久久精品国产免费观看一区二区 | 日韩视频免费观看高清完整版在线 | 国产精品3| 岛国av在线| 91大神一区二区三区 | 一区二区三区动漫 | 在线看片一区 | 色婷婷在线观看视频 | 黄色小说网站在线 | 久久精品这里精品 | 久久天天操 | 国产区精品区 | 日韩精品一区二区免费视频 | 69视频网站 | 色av男人的天堂免费在线 | 欧美日韩在线观看一区 | 伊人亚洲精品 | 欧美污在线观看 | 91看成人 | 天天干,狠狠干 | 99免费在线| 偷拍久久久| 一区二区三区在线免费 | 久久国产一区 | 日韩在线网址 | 国产高清视频网 | 日日爽夜夜爽 | 在线成人观看 | 久久久久久久久免费视频 | 成人免费在线看片 | 成年人电影免费在线观看 | 夜夜摸夜夜爽 | 中文字幕免费高清在线 | 97在线观看免费高清完整版在线观看 | 久久视频在线观看中文字幕 | 国产精品久久久久久久妇 | 一本一道久久a久久综合蜜桃 | 久久男人中文字幕资源站 | 五月天亚洲精品 | 欧美天天综合 | 亚洲最新av在线网站 | 婷婷丁香狠狠爱 | a在线观看免费视频 | 日韩激情免费视频 | 久久成年人视频 | 97精品国产97久久久久久免费 | 欧美日韩69 | 四虎小视频 | 天天射天天操天天色 | 成人在线观看网址 | 天天操人人干 | 免费看片网址 | 国内成人精品2018免费看 | 91亚洲精品视频 | 久草精品视频在线看网站免费 | 欧美黑人xxxx猛性大交 | 午夜三级福利 | 欧美福利视频一区 | 揉bbb玩bbb少妇bbb | 在线免费av播放 | 女人18精品一区二区三区 | 在线视频电影 | 99免费在线观看 | 免费在线色 | 国内精品视频一区二区三区八戒 | 免费在线| 亚洲,国产成人av | 欧美精品久久久 | 亚洲v欧美v国产v在线观看 | 久久全国免费视频 | 99在线热播精品免费99热 | 国产精品24小时在线观看 | 美女免费电影 | 成人精品一区二区三区电影免费 | 91av视频在线观看免费 | 91激情视频在线观看 | 天天操福利视频 | 久久只有精品 | 成年人免费看的视频 | 国产小视频免费在线观看 | 国产91av视频在线观看 | 国产一级久久 | 亚洲人av免费网站 | 高清精品视频 | 久久久首页 | 亚洲人成在线观看 | 久久艹在线观看 | 日韩免费av在线 | 九九九热精品免费视频观看网站 | 国产免费又黄又爽 | 久久人人爽人人爽人人 | 色综合久久久网 | 天天射天天射 | 日韩欧美视频一区二区三区 | 欧美日韩视频免费看 | 不卡av电影在线观看 | 日本午夜在线观看 | 成人在线观看av | 免费久久久| 最新中文字幕在线观看视频 | 国产免费久久久久 | 国产成人专区 | 成人av电影免费观看 | 97超碰人人澡人人 | 成年人在线免费看视频 | 99国产精品久久久久久久久久 | 在线观看视频国产一区 | 亚洲国产精品999 | 亚洲乱码国产乱码精品天美传媒 | 日产乱码一二三区别免费 | av一区在线 | 色婷婷视频网 | 国产精品免费一区二区三区在线观看 | 一区二区免费不卡在线 | 国产无限资源在线观看 | 天天在线免费视频 | 色婷婷www | 久久黄色影院 | 99久高清在线观看视频99精品热在线观看视频 | 在线观看黄 | 国产精品成人免费一区久久羞羞 | 玖草在线观看 | 日日躁夜夜躁aaaaxxxx | 国产精品成人aaaaa网站 | 久久国产手机看片 | 国产精品色 | av黄色av | 国产福利精品一区二区 | 欧美极度另类 | 亚洲无人区小视频 | 人人射人人射 | a极黄色片 | 九九在线视频 | www.91成人| 中文字幕一区在线观看视频 | 欧美激情在线看 | 在线观看的a站 | 96视频在线 | 夜夜夜夜操 | 91视频免费国产 | 在线观看国产日韩欧美 | 午夜视频在线观看一区二区三区 | 国产精品美女久久久久久久久 | 日韩在线视频线视频免费网站 | 黄污网站在线观看 | 精品一区二区av | 91女子私密保健养生少妇 | 欧美激情一区不卡 | 欧美色图一区 | 91在线资源| 国产1区2区 | 中文字幕日本在线 | 亚洲婷久久 | 成年人在线视频观看 | 91麻豆精品国产91久久久更新时间 | 人人精久 | 精品一区二区在线免费观看 | 丁香视频全集免费观看 | 成人午夜剧场在线观看 | 精品一区三区 | 国产伦理一区二区三区 | 国产中文a | 日韩美女黄色片 | 国产精品成人自拍 | 国产一区二区在线精品 | 国偷自产视频一区二区久 | 欧美日韩国产色综合一二三四 | 婷婷看片| 亚洲天堂香蕉 | 一区二区视频在线观看免费 | 在线观看午夜 | 亚洲片在线观看 | 92国产精品久久久久首页 | 欧美久久久久久 | 国产成人av一区二区三区在线观看 | 国产精品久久久久久久7电影 | 青青河边草免费观看 | 久久精品激情 | 99在线播放 | 国产系列 在线观看 | 久久精品99| 97人人爽 | 久久久久亚洲精品 | 免费高清男女打扑克视频 | 欧洲精品在线视频 | 美女网站黄免费 | 天天综合网天天 | 亚洲开心激情 | 伊人欧美 | 国产高清视频在线播放 | 亚洲在线视频观看 | 久久精彩视频 | 国产精品久久久久久久久久久久午 | 日韩爱爱片 | 久久久综合九色合综国产精品 | 欧美大片大全 | 国产亚洲视频中文字幕视频 | 99久久精品久久久久久动态片 | 亚洲国产精品传媒在线观看 | 2019中文 | 久久草视频| 最近中文字幕久久 | 精品国产综合区久久久久久 | 日韩免费电影 | 久草在线视频资源 | 一本一道久久a久久综合蜜桃 | 91在线小视频 | 国产一区在线播放 | 99热在线国产精品 | 一区二区电影在线观看 | 国产精品久久久一区二区 | 中文字幕资源网在线观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 人人干干人人 | 爱干视频| 国内偷拍精品视频 | 人人舔人人舔 | 中文字幕在| 91av在线国产 | 日本久热| 成年人在线免费看视频 | 久久人人精品 | 亚洲成av人片一区二区梦乃 | 丁香六月天 | 中文字幕大全 | 国产视频在线观看免费 | 亚洲天堂精品视频 | 精品国产一区二区三区四区在线观看 | 精品久久国产精品 | 亚洲精品视频网站在线观看 | 亚洲精品www | 麻豆视频大全 | 一区二区三区在线免费观看 | 玖玖视频在线 | 日韩中文字幕免费在线播放 | 在线看片成人 | 久久久色 | 天天曰天天射 | 中文字幕在线看视频国产 | 国产精品欧美精品 | www.天天色.com | 日韩午夜精品 | 日韩在线精品 | www.国产视频 | 国产成人免费精品 | 青青河边草观看完整版高清 | 超碰97人人干 | 五月激情久久 | 亚洲视频网站在线观看 | 日本在线中文在线 | 国产精品欧美精品 | 涩涩网站在线观看 | 日韩欧在线 | 免费看黄色毛片 | 亚洲精品视频播放 | 97精品超碰一区二区三区 | 午夜精品电影 | 成人一区影院 | 在线电影中文字幕 | 一 级 黄 色 片免费看的 | 波多野结衣电影久久 | 国产精品淫 | 久久在视频 | 91麻豆精品国产91久久久久久久久 | 婷婷精品国产欧美精品亚洲人人爽 | 中文字幕av在线电影 | 久久久久国产精品午夜一区 | 日韩一级黄色av | 毛片一区二区 | 午夜手机电影 | 精品免费久久久久 | 美女国产精品 | 免费福利小视频 | 亚洲影视九九影院在线观看 | 91热在线| 亚洲国产精品va在线 | 色综合亚洲精品激情狠狠 | 中文字幕在线播放视频 | 国产免费不卡 | 日韩精品免费专区 | 国产精品久久久久久久久久ktv | 九九视频精品在线 | 国产中文在线播放 | 成年人免费av网站 | 国产一区二区三区免费观看视频 | 91视频高清免费 | 麻豆久久精品 | 精品九九九 | 91精品国产自产在线观看 | 99热在线观看免费 | 欧美精品少妇xxxxx喷水 | 国产区精品在线观看 | 国产96在线观看 | 国产91免费看 | 亚洲欧洲精品一区二区 | 99久久www免费 | 亚洲第二色 | 国内视频在线 | 99色国产 | 亚洲精品国产精品国产 | 国产精品一区二区免费看 | 久久国产精品网站 | 中文字幕一区二区三区乱码在线 | 一区二区三区电影 | 精品综合久久久 | 在线观看av国产 | 欧美一级日韩三级 | 在线观看 国产 | 欧洲性视频 | 国产一区二区三区在线免费观看 | 欧美男女爱爱视频 | 欧美激情综合网 | 免费在线观看av网址 | 99日韩精品 | 国产一区二区三区免费视频 | 黄色成品视频 | 久久最新 | 欧美日韩在线免费观看视频 | 国产中文字幕在线 | 欧美日韩国产一区二区三区 | 久久爱资源网 | 日日干夜夜干 | 国产在线精品二区 | 日韩高清不卡一区二区三区 | 天天伊人网| 91视频在线观看大全 | 国产一二区精品 | 九色视频网址 | 免费看网站在线 | 国产在线黄色 | 久久在草| 国产成人精品一区二区在线观看 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 午夜久久电影网 | 人人看看人人 | 91喷水| 久久免费美女视频 | 99这里都是精品 | 黄网站a | 网站免费黄色 | 麻豆久久久久 | 亚洲国产一二三 | 精品福利国产 | 国产精品久久久久久超碰 | 欧美视频在线观看免费网址 | 亚洲精品动漫成人3d无尽在线 | 成人9ⅰ免费影视网站 | 五月婷婷色丁香 | 久久久久久国产精品亚洲78 | 国产美女免费视频 | 狠狠干电影 | 亚洲一本视频 | av电影免费观看 | 肉色欧美久久久久久久免费看 | 美女久久网站 | 久久免费观看少妇a级毛片 久久久久成人免费 | 亚洲国产97在线精品一区 | 国产精品96久久久久久吹潮 | 久久这里 | 日本在线免费看 | 色激情在线 | 成人午夜剧场在线观看 | 精品国产一区二 | 亚洲老妇xxxxxx | 91成人精品一区在线播放69 | 91视频免费视频 | av在线小说| 成人久久网 | 久草a视频| 欧美色伊人 | 国产一区国产二区在线观看 | 日韩午夜大片 | 欧美va电影| 久久综合在线 | 91欧美视频网站 | 蜜臀av夜夜澡人人爽人人桃色 | 亚洲精品在 | 九色在线视频 | 激情六月婷婷久久 | 国产视频美女 | 美女视频一区二区 | 日日干激情五月 | 日韩免费在线视频 | 18女毛片| 成人免费xxxxxx视频 | 亚洲第一区精品 | 一级做a爱片性色毛片www | 午夜黄色影院 | 日韩理论片 | 国产精品久久麻豆 | 国产精品久久久久一区 | 午夜精品中文字幕 | 91九色porny在线 | 精品产品国产在线不卡 | 99中文在线 | 久久久久久国产精品免费 | 久久国产网站 | 国产不卡一区二区视频 | 免费看一级一片 | 中文字幕精品一区二区三区电影 | 日韩免费看 | 免费观看一级成人毛片 | 全久久久久久久久久久电影 | 99精品视频免费全部在线 | 亚洲午夜久久久久久久久 | 婷五月天激情 | 国产欧美综合视频 | 亚洲精品高清一区二区三区四区 | 日本久久久久久久久久久 | 爱色婷婷| av综合av | 91亚洲精品国偷拍自产在线观看 | 亚洲国产精品免费 | 欧美伦理一区二区三区 | 亚洲一区欧美激情 | 97精品国产97久久久久久粉红 | 国产精选在线 | 亚洲精品国产第一综合99久久 | 91精品国产91热久久久做人人 | 欧美精品在线一区二区 | 日韩理论片在线观看 | 五月婷婷国产 | 国产精品久久久久久久电影 | 成人在线观看av |