亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

安裝和使用MongoDB

浠ラ箍 / 1457人閱讀

摘要:下安裝和配置安裝由于我正好有一個的服務(wù)器,所以順便來試試下安裝。下安裝其實也很簡單,使用對應(yīng)的包管理器可以比較方便的安裝和啟動。首先需要安裝包,如果使用的話非常簡單,右鍵點擊項目,選擇管理安裝的包,然后搜索并安裝即可。

MongoDB是一個著名的NoSQL數(shù)據(jù)庫,顧名思義就是不使用SQL的數(shù)據(jù)庫,目前在很多場景都有使用。如果你不喜歡使用笨拙的各種SQL數(shù)據(jù)庫,可以嘗試使用一下MongoDB,會有不一樣的感受。本文就是一篇簡單的Windows下的安裝和使用教程。

下載和安裝

首先,先到MongoDB官網(wǎng)下載頁下載社區(qū)版的服務(wù)器,由于這里是Windows系統(tǒng),所以當(dāng)然下載Windows版本的。注意我們要下載的是社區(qū)版,而不是導(dǎo)航條第一個的Atlas。如你所見,MongoDB官網(wǎng)是一個商業(yè)化的網(wǎng)站,Atlas正是它提供的一個商業(yè)版服務(wù),可以讓我們連接到他們的服務(wù)器。

具體版本默認(rèn)第一個就可以了,功能最全,帶有SSL支持。注意三個版本都是64位的,所以32位的操作系統(tǒng)無法運行。下載完成之后安裝即可,大約150M左右的安裝包,很快就可以安裝完畢。

配置和啟動

對于我來說,我將其安裝到了D:Program FilesMongoDB。等到安裝完成,打開D:Program FilesMongoDBServer3.4in就會發(fā)現(xiàn)MongoDB的一系列程序,主要用到的就是mongo.exe(客戶端)和mongod.exe(服務(wù)端)。為了使用方便,最好把這個路徑添加到環(huán)境變量中,以后就可以直接在終端中使用這些命令了。首先要做的事情當(dāng)然是啟動服務(wù)端。在終端直接執(zhí)行mongod命令即可。

mongod

然后你就會發(fā)現(xiàn)如圖所示的錯誤。

當(dāng)然具體錯誤圖里面說的很清楚了,沒有數(shù)據(jù)文件夾。默認(rèn)Windows版本,會在你安裝盤符下尋找data/db文件夾作為數(shù)據(jù)文件夾,我的D盤上自然沒有,所以會出現(xiàn)錯誤。解決辦法很簡單,在命令上添加--dbpath參數(shù)即可。

mongod --dbpath d:	estmongodbdata

當(dāng)然還可以使用配置文件。配置文件名字可以隨便起,但是格式必須是YAML格式的。例如我希望讓可執(zhí)行文件目錄下的data文件夾作為數(shù)據(jù)文件夾,并且對于每個多帶帶的數(shù)據(jù)庫都有自己的目錄,就可以這么配置(別忘了創(chuàng)建對應(yīng)文件夾)。關(guān)于配置文件的詳細(xì)文檔可以參考官方Configuration File Options。

storage:
  dbPath: data
  directoryPerDB: true

配置完成后,使用-f或者--config參數(shù)來指定配置文件。

mongod --config /etc/mongod.conf
mongod -f /etc/mongod.conf

這樣,MongoDB服務(wù)器就可以成功啟動了。

注冊為Windows服務(wù)

每次啟動都要輸入命令很麻煩,MongoDB提供了注冊為Windows服務(wù)的功能。本來一開始我是用的winsw來注冊服務(wù)的,然后發(fā)現(xiàn)MongoDB官方就帶了這個功能。所以來介紹一下。

其實很簡單,打開上面介紹的配置文件,然后添加下面一節(jié)內(nèi)容,具體名稱自己修改。這里用戶名和密碼不是必須的。這里日志設(shè)置是必須的,不然會提示無法安裝Windows服務(wù)。

storage:
  dbPath: "D:Program FilesMongoDBServer3.4data"
  directoryPerDB: true
processManagement:
  windowsService:
    serviceName: MongoDB
    displayName: MongoDB
    description: MongoDB
    serviceUser: 
    servicePassword: 
systemLog:
  destination: file
  path: "D:Program FilesMongoDBServer3.4mongod.log"

然后在運行服務(wù)端的時候添加--install參數(shù),而且這里的配置文件路徑必須使用絕對路徑。別忘了使用管理員權(quán)限的cmd或者Powershell來運行。

mongod -f "D:Program FilesMongoDBServer3.4config.yaml" --install

安裝之后的服務(wù)默認(rèn)是開機(jī)自啟的,不過沒有啟動,所以還需要我們手動啟動。手動在服務(wù)中啟動,或者在管理員權(quán)限的Powershell中執(zhí)行下面的命令。

Start-Service MongoDB
客戶端連接

如果沒有修改端口號等配置的話,可以直接連接。

PS C:WINDOWSsystem32> mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
Server has startup warnings:
2017-11-20T04:48:38.134+0800 I CONTROL  [initandlisten]
2017-11-20T04:48:38.134+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-11-20T04:48:38.134+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-11-20T04:48:38.135+0800 I CONTROL  [initandlisten]
>
Linux下安裝和配置 安裝

由于我正好有一個Dedicenter的服務(wù)器,所以順便來試試Linux下安裝。Linux下安裝其實也很簡單,使用對應(yīng)的包管理器可以比較方便的安裝和啟動。例如我的服務(wù)器是CentOS 7的系統(tǒng),所以使用yum包管理器來安裝軟件。下面的命令同時安裝了客戶端和服務(wù)器端。

$ sudo yum install mongodb-server mongodb

當(dāng)然我安裝完了之后發(fā)現(xiàn)了一個問題,那就是CentOS自帶的MongoDB版本比較低,現(xiàn)在的版本是3.4,而自帶的版本是2.6.所以還是需要自己安裝最新版的。具體方法需要搜索。對于CentOS 來說,首先需要創(chuàng)建社區(qū)源的文件/etc/yum.repos.d/mongodb-org-3.4.repo,內(nèi)容如下。

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

然后安裝mongodb-org軟件包,會包括客戶端、服務(wù)端、shell工具等四個軟件包。

$ sudo yum install mongodb-org

如果對應(yīng)的系統(tǒng)還啟用了SELinux,那么還需要做一些額外工作,這些工作就需要查看官方文檔Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux了。我的服務(wù)器沒有SELinux功能,所以不需要這額外的步驟了。

配置并啟動

Linux下,MongoDB的數(shù)據(jù)文件在/var/lib/mongo下,日志文件在/var/log/mongodb下,這些都不需要更改。如果有需要的話,別忘了設(shè)置對應(yīng)的權(quán)限。

首先需要編輯一下配置文件/etc/mongod.conf。先來設(shè)置一下監(jiān)聽IP,由于這是我的服務(wù)器,我希望可以在外網(wǎng)訪問數(shù)據(jù)庫,所以把IP這一行注釋掉,或者修改成0.0.0.0。其余配置按需求更改。

net:
  port: 27017
#  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on all interfaces.

然后啟動服務(wù)端。

sudo systemctl enable mongod
sudo systemctl start mongod

然后輸入mongo命令來連接。如果是連接其他主機(jī)的服務(wù)器,需要使用額外的參數(shù)。

mongo -host XXX.XX.XXX.XXX -port 27017
基本使用 用戶授權(quán)

在前面我們一直都沒有設(shè)置用戶名和密碼,這可能導(dǎo)致安全問題,登錄客戶端的時候也同時給了警告。所以我們第一件事情就是設(shè)置用戶名和密碼。這部分可以參考官方文檔Enable Auth。

首先先以默認(rèn)方式登錄,然后切換到管理員數(shù)據(jù)庫并新建管理員用戶。

use admin
db.createUser(
  {
    user: "admin",
    pwd: "12345678",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

然后在重啟服務(wù)端的時候同時添加--auth參數(shù),或者在配置文件中設(shè)置。

security:
  authorization: enabled

服務(wù)器啟用驗證之后,客戶端在登錄的時候也需要驗證??梢栽趩拥臅r候通過參數(shù)來驗證。

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

或者先以無權(quán)限方式登錄,然后在進(jìn)行驗證。

use admin
db.auth("myUserAdmin", "abc123" )

當(dāng)然,實際情況中我們肯定不會使用管理員去登錄一般數(shù)據(jù)庫(實際上MongoDB也不允許,管理員只有創(chuàng)建用戶和角色的權(quán)限),所以還需要創(chuàng)建一個普通用戶進(jìn)行訪問。在你使用的數(shù)據(jù)庫中創(chuàng)建一個用戶,并賦予合適的權(quán)限即可。登錄方式基本同上,只不過驗證數(shù)據(jù)庫改一下就行。

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

當(dāng)然,如果是開發(fā)和測試,建立一個萬能的管理員用戶更加省時。

use admin
db.createUser(
    {
      user: "superuser",
      pwd: "12345678",
      roles: [ "root" ]
    }
)
插入數(shù)據(jù)

先來說說MongoDB的增刪查改。這一部分的官方文檔是MongoDB CRUD Operations,這一塊的文檔做的非常好,還配有Web控制臺可以連接到它的示例數(shù)據(jù)庫,所以我們可以一邊閱讀文檔一邊測試命令,非常方便。

首先先選定一個數(shù)據(jù)庫,如果該數(shù)據(jù)庫不存在,會創(chuàng)建這個數(shù)據(jù)庫。

use hello

先來看看插入操作,主要有以下兩個方法,分別用于一次性插入一個或多個數(shù)據(jù)。如果集合不存在,會首先創(chuàng)建這個集合。

db.collection.insertOne()")

db.collection.insertMany()")

下面是一個簡單的例子。插入的數(shù)據(jù)類似JSON格式。

> db.user.insertOne({id:1,name:"yitian",age:24})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5a12bc37f8fe60078d1a24fe")
}
> db.user.insertOne({id:2,name:"zhang3",age:25})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5a12bc93f8fe60078d1a24ff")
}

如果要使用insertMany插入多個數(shù)據(jù),需要使用[]來傳遞一個數(shù)組。這是官方文檔的例子。

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
查詢數(shù)據(jù)

首先準(zhǔn)備一些示例數(shù)據(jù)。

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

如果要查詢所有數(shù)據(jù),直接傳遞一個空對象。

db.inventory.find( {} )

如果用具體的條件來查詢,直接傳遞具體的鍵值對{ : , ... }即可。

db.inventory.find( { status: "D" } )

如果使用條件查詢的話,需要傳遞查詢屬性、運算符以及查詢條件{ : { : }, ... }

# 查詢stauts是A或D的
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
# 查詢status是A,且qty小于30的
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
# 查詢status是A或qyt小于30的
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
# 更復(fù)雜的查詢
db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
更新數(shù)據(jù)

更新操作主要使用以下三個函數(shù),用于更新一個、多個或者替換數(shù)據(jù)。就是切面介紹的查詢條件,其余的將在下面介紹。

db.collection.updateOne(, , )

db.collection.updateMany(, , )

db.collection.replaceOne(, , )

先來看看更新一個數(shù)據(jù),需要用到$set操作符,用來設(shè)置新屬性。$currentDate操作符用于設(shè)置最后修改時間,如果lastModified屬性不存在,就會添加這個屬性并設(shè)置為當(dāng)前時間。

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

類似的,是更新多條數(shù)據(jù)。

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

最后是替換數(shù)據(jù)。

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

最后來說說。目前這個選項只有一個upsert : true,如果設(shè)置為true,那么如果沒有查詢到相應(yīng)的數(shù)據(jù),會將更新的數(shù)據(jù)作為新數(shù)據(jù)插入到數(shù)據(jù)庫中。

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

刪除數(shù)據(jù)相對來說很簡單,語法和前面基本類似。所以直接來看李子壩。

首先是刪除所有數(shù)據(jù)。

db.inventory.deleteMany({})

刪除符合條件的所有數(shù)據(jù)。

db.inventory.deleteMany({ status : "A" })

刪除單條數(shù)據(jù)。

db.inventory.deleteOne( { status: "D" } )
編程使用MongoDB

官方文檔MongoDB CRUD Operations做的很不錯的一點就是包含了多種語言的范例,基本上支持了現(xiàn)在所有的主流語言。

使用Python

官方推薦使用PyMongo庫來操作MongoDB。首先需要安裝。文檔可以參考PyMongo 3.5.1 Documentation。

pip install PyMongo

簡單的增刪查改例子如下。

from  pymongo import MongoClient
from pprint import pprint

# 連接數(shù)據(jù)庫
client = MongoClient("localhost", 27017)

# 選擇數(shù)據(jù)庫
db = client["hello"]

# 獲取集合
user = db.user

# 插入數(shù)據(jù)
user.insert_one({"_id": 1, "name": "yitian", "age": 24})
user.insert_one({"_id": 2, "name": "zhang3", "age": 25})
user.insert_one({"_id": 3, "name": "li4", "age": 26})

# 更新數(shù)據(jù)
user.update_one({"_id": 1}, {"$set": {"name": "易天"}})
user.update_many({}, {"$inc": {"age": 1}})

# 查詢數(shù)據(jù)
yitian = user.find_one({"name": "yitian"})
yitian = user.find_one({"_id": 1})
pprint(yitian)

print("------所有數(shù)據(jù)--------")
for u in user.find():
    pprint(u)

print("------年齡大于25的--------")
for u in user.find({"age": {"$gt": 25}}):
    pprint(u)

# 刪除所有數(shù)據(jù)
user.remove({})
使用C

C#和Kotlin是我最喜歡的兩門語言。所以順便來看看如何用C#訪問MongoDB。對應(yīng)的官網(wǎng)文檔是MongoDB .NET Driver。

首先需要安裝NuGet包,如果使用Visual Studio的話非常簡單,右鍵點擊項目,選擇管理安裝的NuGet包,然后搜索并安裝MongoDB即可。下面是個簡單的例子。

        public static void Sample()
        {
            var client = new MongoClient("mongodb://localhost:27017");
            var db = client.GetDatabase("hello");
            var user = db.GetCollection("user");
            user.InsertOne(new BsonDocument
            {
                {
                    "name", "yitian"
                },
                {
                    "_id", 1
                },
                {
                    "age", 25
                }
            });
            user.InsertOne(new BsonDocument
            {
                {
                    "name", "li4"
                },
                {
                    "_id", 3
                },
                {
                    "age", 24
                }
            });

            Console.WriteLine("查詢單條數(shù)據(jù)");
            var filter = Builders.Filter.Eq("_id", 1);
            Console.WriteLine(
                user.Find(filter).First()
            );
            Console.WriteLine("更新用戶姓名");
            user.FindOneAndUpdate(filter, Builders.Update.Set("name", "易天"));

            Console.WriteLine("條件查詢大于25的");
            filter = Builders.Filter.Gte("age", 25);
            user.Find(filter).ToList().ForEach(e => Console.WriteLine(e));

            Console.WriteLine("所有數(shù)據(jù)");
            user.Find(new BsonDocument()).ToList().ForEach(e => Console.WriteLine(e));

            user.DeleteMany(new BsonDocument());
        }
圖形客戶端

最后來介紹一下幾個圖形客戶端,方便我們對數(shù)據(jù)進(jìn)行可視化處理。

Compass

第一個就是MongoDB官方的圖形客戶端Compass,用起來還可以。

MongoBooster

第二個叫MongoBooster,是一個MongoDB的IDE,智能提示和補(bǔ)全比較方便,同時支持流式API方便查詢。

Robo 3T

第三個是Robo 3T,原名叫做Robomongo,是一個輕量級圖形客戶端。如果希望更多功能,還可以下載使用Studio 3T,一個智能IDE。

最后說一下我對MongoDB的感受。它是一個比較輕量級的NoSQL數(shù)據(jù)庫,存儲序列化的數(shù)據(jù)很合適,但是多表查詢功能比較弱,要想做到SQL數(shù)據(jù)庫那種復(fù)雜的多表查詢比較困難。但是如果是個人小項目的話,還是非常推薦使用的,用起來心理作用上比SQL數(shù)據(jù)庫的逼格還是要高一些的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44490.html

相關(guān)文章

  • (翻譯) MongoDB(17) 在 Windows 上安裝MongoDB社區(qū)版

    摘要:概述使用本教程在系統(tǒng)上安裝社區(qū)版平臺支持自版本開始不支持請使用更新版本的來使用更新版本的重要如果你正在運行任何版本的或者請安裝修復(fù)程序以解決上的內(nèi)存映射文件的問題要求社區(qū)版需要或者更高版本安裝程序包含所有其它軟件依賴項將自動更新使用文件安裝 概述 使用本教程在 Windows 系統(tǒng)上安裝 MongoDB 社區(qū)版. 平臺支持: 自2.2版本開始, MongoDB 不支持 Windo...

    shaonbean 評論0 收藏0
  • (翻譯) MongoDB(11) 在 SUSE 上安裝MongoDB社區(qū)版

    摘要:概述使用這個教程在和使用軟件包安裝社區(qū)版雖然發(fā)行版包含自己的軟件包官方的社區(qū)版包通常是最新的平臺支持本安裝教程僅支持位操作系統(tǒng)詳細(xì)信息請參閱平臺支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件包軟件名簡介一個元軟件包將自動 概述 使用這個教程在 SUSE Linux 11 和 12 使用 .rpm 軟件包安裝 MongoDB 社區(qū)版. 雖然 SUSE 發(fā)行版包含自己的 ...

    zone 評論0 收藏0
  • (翻譯) MongoDB(14) 在 Debian 上安裝MongoDB社區(qū)版

    摘要:概述使用這個教程在或者使用軟件包安裝社區(qū)版雖然包含自己的軟件包但官方的社區(qū)版包通常是最新的本安裝教程僅支持位操作系統(tǒng)詳細(xì)信息請參閱平臺支持這些軟件包可以與其它版本一起工作。 概述 使用這個教程在 Debian 7 Wheezy 或者 Debian 8 Jessie 使用 .deb 軟件包安裝 MongoDB 社區(qū)版. 雖然 Debian 包含自己的 MongoDB 軟件包, 但官方的 ...

    gaara 評論0 收藏0
  • (翻譯) MongoDB(12) 在 Amazon Linux 上安裝MongoDB社區(qū)版

    摘要:概述使用這個教程在使用軟件包安裝社區(qū)版本安裝教程僅支持位操作系統(tǒng)詳細(xì)信息請參閱平臺支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件包軟件名簡介一個元軟件包將自動安裝下面列出的四個組件包包含守護(hù)程序和關(guān)聯(lián)配置和初始化腳本 概述 使用這個教程在 Amazon Linux 使用 .rpm 軟件包安裝 MongoDB 社區(qū)版. 本安裝教程僅支持64位操作系統(tǒng). 詳細(xì)信息請參閱平...

    gself 評論0 收藏0
  • (翻譯) MongoDB(13) 在 Ubuntu 上安裝MongoDB社區(qū)版

    摘要:概述使用這個教程在使用軟件包安裝社區(qū)版包含自己的軟件包但官方的社區(qū)版包通常是最新的平臺支持本安裝教程僅提供位長期支持版本例如,等等這些軟件包可能將和其它版本一起工作然后它們并不支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件 概述 使用這個教程在 LTS Ubuntu Linux 使用 .deb 軟件包安裝 MongoDB 社區(qū)版. Ubuntu 包含自己的 Mong...

    wuyumin 評論0 收藏0
  • (翻譯) MongoDB(10) 在 Red Hat 企業(yè)版或者 Centos Linux 上安裝M

    摘要:概述使用這個教程在企業(yè)版或者使用軟件包安裝社區(qū)版雖然一些發(fā)行版包含自己的軟件包官方的社區(qū)版包通常是最新的平臺支持本安裝教程僅支持位操作系統(tǒng)詳細(xì)信息請參閱平臺支持不建議對企業(yè)版的支持軟件包在自己的存儲庫中提供官方支持軟件包此存儲庫包含以下軟件 概述 使用這個教程在 Red Hat 企業(yè)版 Linux 或者 CentOS6/7 Linux 使用 .rpm 軟件包安裝 MongoDB 社區(qū)版...

    cartoon 評論0 收藏0

發(fā)表評論

0條評論

浠ラ箍

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<