MongoDB Notes

MongoDB
啓動一個 mongo 實例
$ docker run --name some-mongo -d daocloud.io/mongo
因爲該鏡像的 Dockerfile 中包含了 EXPOSE 27017(mongo 默認端口),因此能夠經過 link 兩個容器來訪問它(就像下面的示例)。

docker run --name cool-mongo -p 27017:27017 -d mongo
docker run --name mongo-serve1 -P -d mongo

---
MongoDB客戶端工具:
https://robomongo.org/download
啓動報錯:
./robo3t: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by ./robo3t)
./robo3t: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ./robo3t)
./robo3t: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./robo3t)
./robo3t: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by ./robo3t)
./robo3t: /lib64/libz.so.1: version `ZLIB_1.2.3.4' not found (required by /home/sam/download/robo3t-1.2.1-linux-x86_64-3e50a65/bin/../lib/libQt5Gui.so.5)

http://www.gnu.org/software/libc/
下載列表:
http://ftp.gnu.org/gnu/glibc/
查看libc版本:
ldd --version
strings /lib64/libc.so.6 | grep GLIBC  

安裝新版本glibc:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.xz
tar xvf glibc-2.18.tar.xz
cd glibc-2.18
mkdir build
cd build
export LD_LIBRARY_PATH=
../configure --prefix=/opt/glibc-2.18
make
sudo make install
export LD_LIBRARY_PATH=/opt/glibc-2.18/lib

更新zlib:
http://zlib.net/
安裝個新版的zlib

wget http://zlib.net/zlib-1.2.8.tar.gz
tar zxf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/opt/zlib-1.2.8
make && make install
#cp /usr/local/lib/libz.so.1.2.8 /lib64/
#cd /lib64/
#rm libz.so.1
ln -s libz.so.1.2.8 /opt/glibc-2.18/lib/libz.so.1

~/download/robo3t-1.2.1-linux-x86_64-3e50a65/bin$ ./robo3t 
段錯誤 (core dumped)
仍是報錯,放棄,在windows上運行客戶端.
---


如下參考來自 https://dashboard.daocloud.io/packages

什麼是 MongoDB?

MongoDB (源自 "humogous")是一個面向文檔的跨平臺數據庫。做爲一個 NoSQL 數據庫,MongoDB 避開了傳統關係型數據庫結構,轉而使用動態相似 JSON 的 BSON 格式,使其能輕鬆地將多個數據寫在同一類型中。MongoDB 以 AGPL 和 Apache License 聯合協議發佈。

MongoDB 最先由 10gen 軟件公司(如今爲 MongoDB 公司)於 2007 年 10 月時做爲 PaaS 服務的一個組件開始開發,然後在 2009 年該公司轉型爲開源模式並與 10gen 公司提供商業技術支持。以後 MongoDB 就被一些大型網站和服務商做爲後端軟件使用,包括 Craigslist、eBay、Foursquare、SourceForge、Viacom 和紐約時報等等。MongoDB 是當今最流行的 NoSQL 數據庫軟件。

    wikipedia.org/wiki/MongoDB

logo
如何使用本鏡像

    因全部鏡像均位於境外服務器,爲了確保全部示例能正常運行,DaoCloud 提供了一套境內鏡像源,並與官方源保持同步。

啓動一個 mongo 實例

$ docker run --name some-mongo -d daocloud.io/mongo

因爲該鏡像的 Dockerfile 中包含了 EXPOSE 27017(mongo 默認端口),因此能夠經過 link 兩個容器來訪問它(就像下面的示例)。
在應用中鏈接該實例

$ docker run --name some-app --link some-mongo:mongo -d application-that-uses-mongo

使用 mongo 命令

$ docker run -it --link some-mongo:mongo --rm daocloud.io/mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'

相關配置

你能夠查閱官方文檔來了解如何配置 MongoDB 進行復制或分片操做。

你也能夠簡單地設置 --storageEngine 參數來指定你須要的儲存引擎(好比 MongoDB 3.0 中的 WiredTiger)。若是須要從舊版本升級的話,請確保你已熟悉此文檔。

$ docker run --name some-mongo -d daocloud.io/mongo --storageEngine wiredTiger

儲存數據的位置

摘要:下面介紹了多種儲存 Docker 容器中數據的方式,咱們鼓勵 mongo 鏡像用戶熟悉下面各項技術:

    使用 Docker 自帶的 Volume 機制將數據庫文件寫入宿主機的磁盤。這是默認的方式,對用戶來說簡單且透明。缺點是宿主機上的工具或應用可能難以定位這些文件。
    在宿主機上建立一個數據目錄(在容器外部)並把他掛載至容器內部。此時數據庫文件被放置在宿主機上一個已知的目錄裏,那樣容器外部的應用和工具就能夠方便地訪問這些文件。缺點是用戶須要確保這些目錄存在,且宿主機上正確配置了權限設置。

警告:因爲 MongoDB 使用了內存映射機制,所以當你使用 vboxsf 時會出現錯誤,這是一個已知的 bug (vbox bug)。

閱讀 Docker 文檔能快速瞭解不一樣的儲存選項,而且有不少博客或論壇討論並給出了這方面的建議。咱們會在下面簡單地演示一下:

    在宿主機上建立一個數據目錄,例:/my/own/datadir。
    使用下面的命令啓動 mongo 容器:

$ docker run --name some-mongo -v /my/own/datadir:/data/db -d daocloud.io/mongo:tag

咱們經過 -v /my/own/datadir:/data/db 參數從宿主機掛載 /my/own/datadir 目錄至容器內做爲 /data/db 目錄,那樣 MongoDB 就會默認將數據文件寫入這個目錄中。

注意 SELinux 用戶可能會遇到一個問題,目前的解決方法是爲你的數據目錄指定相關的 SELinux 策略配置,那樣容器才能夠訪問它:

$ chcon -Rt svirt_sandbox_file_t /my/own/datadir

docker exec -it mongo-serve1 /bin/bash

https://docs.mongodb.com/ecosystem/drivers/python/
http://api.mongodb.com/python/current/tutorial.html?_ga=2.97811103.1034840361.1523333005-2036341224.1523333005

Python MongoDB Drivers
This is an overview of the available tools for using Python with MongoDB. Those wishing to skip to more detailed discussion should check out the Python Driver Tutorial.
Python Driver
PyMongo is the recommended way to work with MongoDB from Python.

We recommend using pip to install pymongo on all platforms
python -m pip install pymongo

To get a specific version of pymongo:
$ python -m pip install pymongo==3.5.1

To upgrade using pip:
$ python -m pip install --upgrade pymongo

import pymongo
from pymongo import MongoClient
client = MongoClient()
client = MongoClient('localhost', 27017)
client = MongoClient('mongodb://localhost:27017/')

 db = client.test_database
db = client['test-database']
collection = db.test_collection
collection = db['test-collection']

P66

 

使用數據庫名:
use db_name

db.users.insert({username: "dannis 吳"})

db.users.find()

db.users.insert({username: "jones"})
添加屬性:
db.users.update({username: 'jones'}, {$set: {country:'Canada'}})
刪掉屬性:
db.users.update({username: 'jones'}, {$unset: {country:1}})

db.users.update({username: 'jones'}, {$set: {
favorites:{
	cities: ["Chicago","Cheyenne"],
	movies: ['Casablanca', "The String"]
}}})

db.users.update({username: 'jones'}, {$set: {
favorites:{	
	movies: ['Casablanca', "Rokey"]
}}})

db.users.find({'favorites.movies':'Rokey'})

db.users.update({'favorites.movies':'Casablanca'},
{$addToSet: {'favorites.movies': 'The Maltese Falcon'} }, false,true
)
db.users.update({'favorites.movies':'Casablanca'},
{$push: {'favorites.movies': 'The Maltese Falcon'} }, false,true
)
第4個參數true說明這是一個多項更新multi-update.
$push會重複,$addToSet不會重複.

刪除集合裏的數據:
db.users.remove({'favorites.movies':'The Maltese Falcon'})
db.users.remove()
刪除集合:
db.users.drop()


for(i=0;i<10000;i++){
	db.numbers.save({num:i});
}
db.numbers.count()
db.numbers.remove({})
db.numbers.find({num:50})
db.numbers.find({num:{$gt:50}})
db.numbers.find({num:{$gt:50, $lt:60}})
建立索引:
db.numbers.ensureIndex({num:1})
查看執行計劃:
db.numbers.find({num:{$gt:50, '$lt':60}}).explain()
查看索引:
db.numbers.getIndexes()
顯示數據庫列表:
show dbs
顯示集合:
show collections
啓動日誌:
db.getCollection('startup_log').find({})
顯示數據庫統計信息:
db.stats()
db.runCommand({dbstats:1})
{
    "db" : "tutorial",
    "collections" : 1,
    "views" : 0,
    "objects" : 100,
    "avgObjSize" : 35.0,
    "dataSize" : 3500.0,
    "storageSize" : 16384.0,
    "numExtents" : 0,
    "indexes" : 2,
    "indexSize" : 32768.0,
    "fsUsedSize" : 4803354624.0,
    "fsTotalSize" : 19308478464.0,
    "ok" : 1.0
}


db.numbers.stats()
db.runCommand({collstats:'numbers'})

http://www.cnblogs.com/phpfans/p/4852808.html
MongoDB的寫安全機制
寫入安全(Write Concern)是一種由客戶端設置的,用於控制寫入安全級別的機制,經過使用寫入安全機制能夠提升數據的可靠性。

MongoDB提供四種寫入級別,分別是:
(Unacknowledged)非確認式寫入
(Acknowledged)確認式寫入
(Journaled)日誌寫入
(Replica Acknowledged)複製集確認式寫入

W選項

0:非確認式寫入
1:確認式寫入
  說明:這個級別下,對副本級只對主庫作確認寫入
2:副本級確認式寫入
  說明:這個級別下,副本級第一個slave寫入成功後就響應給client
majority:複製級更多slave寫入成功後,在響應給client

print("======writeConcern的使用 - 非確認式寫入======")
var result = db.wirte_concern.insert(doc1,{writeConcern:{w:0}})
printjson(result)

print("======writeConcern的使用 - 確認式寫入======")
var result = db.wirte_concern.insert(doc1,{writeConcern:{w:1}})
printjson(result)

print("======writeConcern的使用 - 確認式寫入 + journaled + wtimeout======")
var result = db.wirte_concern.insert(doc1,{writeConcern:{w:1,j:true,wtimeout:5}})
printjson(result)
相關文章
相關標籤/搜索