集合
統計を照合するマルチドキュメントデータ
db.collectionName.aggregate()
機能:集約関数、重合条件のデータ削減統計で
パラメータ:重合条件
重合オペレータ
$グループパケット:パケットとパケットによって決定されるものと組み合わせて使用される演算子
グループ化演算子
$合計加算:{$合計:1}の各グループの統計情報の数(即ち、各性別の数、合計プラス1)を表します
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$合計:1}}})
重合--------- --------- ----------パケット統計性別によるパケット-----
{ "_id":ヌル、 "TOTAL_NUM":4}
{ "_id": "男性"、 "TOTAL_NUM":2}
{ "_id": "女性"、 "TOTAL_NUM":4}
$合計加算:{$合計:「$年齢」「}各グループの統計の数を表し(即ち、各性別の数、年齢プラス1)
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$和: '$年齢'}}})
{ "_id":ヌル、 "TOTAL_NUM":80}
、{ "_id" "男性"、 "TOTAL_NUM":85}
{ "_id": "女性"、 "TOTAL_NUM":125}
>
$平均アベレージ
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$平均: '$年齢'}}})
{ "_id":ヌル、 "TOTAL_NUM":40}
、{ "_id" : "男性"、 "TOTAL_NUM":42.5}
{ "_id": "女性"、 "TOTAL_NUM":31.25}
>
最小$分間
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$分: '$年齢'}}})
{ "_id":ヌル、 "TOTAL_NUM":25}
、{ "_id" "男性"、 "TOTAL_NUM":30}
{ "_id": "女性"、 "TOTAL_NUM":24}
>
$マックス最大需要
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$最大: '$年齢'}}})
{ "_id":ヌル、 "TOTAL_NUM":55}
、{ "_id" : "男性"、 "TOTAL_NUM":55}
、{ "_id": "女性"、 "TOTAL_NUM":45}
>
$まず、グループごとに最初の文書、指定されたしきい値を返します。
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$最初: '$名'}}})
{ "_id":ヌル、 "TOTAL_NUM": "永强"}
{ "_id": "男性"、 "TOTAL_NUM": "广坤"}
、{ "_id": "女性"、 "TOTAL_NUM": "刘英"}
>
$最後の各グループの最初の文書、指定されたしきい値を返します。
> db.class1.aggregate({$基:{_ ID: '$性別'、TOTAL_NUM:{$最後: '$名'}}})
{ "_id":ヌル、 "TOTAL_NUM": "王天来"}
、{ " _id」: "男性"、 "TOTAL_NUM": "玉田"}
、{ "_id": "女性"、 "TOTAL_NUM": "小刘英"}
>
$プロジェクト
ディスプレイは、文書の構造を変更するために使用します
> Db.class1.aggregate({$プロジェクト:ID {_:0、名前:}} 1)
{ "名前": "劉"}
、{ "名前": "ワイドくん"}
、{ "名前":「グレート謝足"}
、{"名":"小さな夢"}
、{"名":"永強"}
、{"名":"玉田"}
、{"名":"小さな劉英"}
、{"名":"劉缶「}
{」名「:」テイトがある「}
、{」名「:」王の日「}
>
あなたは、ドメイン名の表示を変更し、実際に変更することはできません
> Db.class1.aggregate({$プロジェクト:ID {_:0、NAME: '$名'}})
{ "NAME": "劉"}
、{ "NAME": "ワイドくん"}
、{ "NAME"。 "謝フィート"}
、{ "NAME": "小さな夢"}
、{ "NAME": "永強"}
、{ "NAME": "玉田"}
、{ "NAME": "小劉"}
、{ "NAME" "劉NENG"}
、{ "NAME"} "テートが"
{ "NAME": "日の王"}
データをフィルタリングする$マッチ
検索クエリで値演算子、
> Db.class1.aggregate({$マッチ:{名:{$のGT: ' 玉田'}}})
{ "_id":のObjectId( "5d315c6f9a271d2e4db00377")、 "名前": "王の日"、 "faimly":{ "父": "劉缶"、 "母": "謝フィート"}}
{ "_id":のObjectId( "5d2fe2be6c7d5889fff5fb31")、 "名前": "謝フィート"、 "趣味": "ダンス" "睡眠" "飲み物、"] "歌う"、 "年齢":45 、 "場所": " 象牙の山"、 "性別": "女性 "}
$スキップは、最初のいくつかの文書をスキップ
> Db.class1.aggregate({$スキップ:6})
{ "_id":のObjectId( "5d301d939646724b48d62ae5")、 "名前" "小劉英"、 "趣味": "学習"、 "シネマ" "音楽を聴く"、 "年齢" 24 、 "場所"、 " アイボリー山"、 "性別"、 "女性"}
{ "_id":のObjectId( "5d30261f9646724b48d62b0e")、 "名前": "劉NENG" "年齢" 55、 "趣味 ":" ドリンク"、 "牛"、 "麻雀"]、 "電話":138}
{ "_id":のObjectId( "5d3158d59a271d2e4db00376")、 "名":「テイト"}である
":のObjectId(" 5d315c6f9a271d2e4db00377 ")、"名前{" _idは":"王の日"" faimly ":{"父":" 劉粲」、"母": "谢大脚"}}
>
$リミット表示いくつかのドキュメント
> db.class1.aggregate({$制限:3})
{ "_id":のObjectId( "5d2ed0c9226651eee5c79df3")、 "名": "刘英"、 "趣味":[ "吃饭"、 "睡觉"、「打豆豆"]、 "年齢":31、 "場所": "象牙山"、 "性別"、 "女性"}
{ "_id":のObjectId( "5d2ee382226651eee5c79df6")、 "名前": "广坤"、"趣味":[ "抽烟"、 "烫头"]、 "年齢":55、 "場所": "象牙山"、 "性別"、 "男性"}
{ "_id":のObjectId( "5d2fe2be6c7d5889fff5fb31")、"名前": "谢大脚"、 "趣味": "跳舞"、 "睡觉"、 "喝酒"、 "唱歌"]、 "年齢":45、 "場所":"象牙山」、 "性別": "女性"}
>
$ソートソート
> Db.class1.aggregate($ {ソート:{名:}} 1)
{ "_id":のObjectId( "5d30261f9646724b48d62b0e")、 "名前": "劉粲"、 "年齢" 55、 "趣味":[ "飲料"、 "牛"、 "麻雀"]、 "電話":138}
{ "_id":のObjectId( "5d2ed0c9226651eee5c79df3")、 "名前": "劉"、 "趣味"は:[ "食べます"、 "スリープ"、 "豆をプレイ"]、 "年齢":31 、 "場所"、 " アイボリー山"、 "性別"、 "女性"}
{ "_id":のObjectId( "5d3158d59a271d2e4db00376")、 "名前": } "テイトは"
、 "名前"のObjectId( "5d301d939646724b48d62ae5"): "小劉英"、 "趣味": "学習"、 "シネマ" { "_id"] "音楽を聴く"、 "年齢":24 、 "場所": "アイボリー・マウンテン"、 "性別": "女性"}
、{ "_id":ObjectIdが( "5d2fe2f16c7d5889fff5fb32")、 "名": "リトル・ドリーム" "趣味":[、 "スリープ"、 "プレーン" "テレビを見て"]、 "年齢":25 、 "場所": " 象牙の山"、 "性別": "女性 "}
{ "_id":のObjectId( "5d2ee382226651eee5c79df6")、 "名前": "广坤"、 "趣味":[ "抽烟"、 "烫头"]、 "年齢":55、 "場所": "象牙山" 、 "性別": "男性"}
、{ "_id":のObjectId( "5d2fe30a6c7d5889fff5fb33")、 "名": "永强"、 "趣味": "看电视"、 "睡觉"]、 "年齢":25 "場所": "象牙山"}
、{ "_id":のObjectId( "5d2fe49e6c7d5889fff5fb37")、 "名前": "玉田"、 "趣味": "打豆豆"、 "睡觉"]、 "年齢": 30、 "場所": "象牙山"、 "性別"、 "男性"}
{ "_id":のObjectId( "5d315c6f9a271d2e4db00377")、 "名前":"王の日"" faimly ":{"父":"劉はできる""お母さん":"謝は足"}}
{" _id ":ObjectIdが(" 5d2fe2be6c7d5889fff5fb31 ")、"名":"謝ビッグフット""趣味":["ダンス""スリープ""ドリンク""歌"]、"年齢":45 、"場所":" 象牙の山""性別":"女性「}
>性別」: "女性"} >性別」: "女性"} >
高分子パイプ
重合の前の演算結果、次の重合操作は、継続します
db.collcetioName.aggregate([1つの重合、重合2、...])
> Db.class1.aggregate([{$マッチ: {名:{$のGT: ' 缶劉'}}}、{$プロジェクト :{_ ID:0、DISPLAY_NAME: '$名'}}、{$ソート:{ 名前:-1}])
{ "DISPLAY_NAME": "劉"}
、{ "DISPLAY_NAME": "テートである"}
、{ "DISPLAY_NAME": "小劉"}
、{ "DISPLAY_NAME": "小さな夢"}
{ "DISPLAY_NAME": "ワイドくん"}
、{ "DISPLAY_NAME": "永強"}
、{ "DISPLAY_NAME": "玉田"}
、{ "DISPLAY_NAME": "日王"}
、{ "DISPLAY_NAME": "謝ビッグフット"}
>
> db.class1.aggregate([{$基:{_ ID: '$性別'、TOTAL_NUM:{$合計:1}}}、{$マッチ:{$や:[{_ ID: '男性'}、{_ ID '女性'}]}}])
{ "_id":ヌル、 "TOTAL_NUM":4}
>
固定セット
目的:ログイン処理または一時的なキャッシュ
Mongoのは、固定サイズのセットを作成することができ、多くの場面で使用される固定されたセット、優れた特性の固定のセットを、と呼ばれます
特徴:1、挿入速度
2、クエリの速度の順
3、データを早期に解消することができます
4、収集空間を制御することができます
初出:
db.createCollection(COLLECTIONNAME、{キャップされた:真、サイズ:値、最大:値})
サイズ:KBに設定された固定サイズを設定
最大:文書の数に対応するためにアップ
> db.createCollection( 'ログイン'、{キャップされた:真、サイズ:10、最大:3})
> Db.Log.insert({ID: '1 '、エラー: ' ファイルエラー'})
WriteResult({ "nInserted":} 1)
> db.Log.insert({ID: '2'、エラー:「ファイルエラー'})
WriteResult({ "nInserted":} 1)
> db.Log.insert({ID:' 3 'エラー:'入力エラー「})
WriteResult({ "nInserted":} 1)
> db.Log .insert({ID: '4' 、エラー: ' 入力エラー'})
WriteResult({ "nInserted":} 1)
> db.Log.find({}、{_ ID:0})
{ "ID": " 2 ""エラー":"ファイルエラー"}
、{" ID ":" 3 ""エラー":"入力エラー"}
、{" ID ":" 4 ""エラー":"入力エラー「}
>
ファイルストレージ
ファイルに保存されているデータベース:
ローカルデータベースでの1、文字列で、ストレージ・ファイル・パス
長所:データベースのスペースを節約。
欠点:データベースまたはファイルの場所が変更された場合には、対応するコンテンツデータベースを変更する必要があります
図2に示すように、データベースに格納されたバイナリデータのようにファイル
長所:ファイルは、限りデータベースとして、データベースに格納されたファイルが失われることはありません
短所:大規模によって占められたファイルが大きい場合、データベース領域、進出することは困難
MongoのがGridFSメソッドを使用し、大規模なファイルストレージ
GridFS:MongoDBのは、大規模なプログラムファイルは、大きなファイルの16Mを超えるファイルそのモンゴが開催され、保存されています
プログラムが動作します:
Mongoのデータベースでは、ファイルの保存を完了するために、2つのセットを作成します
fs.files:インフォメーションストアファイル、など:ファイル名とファイルタイプ
fs.chunks:ファイルの実際の内容は、バイナリメモリブロックに格納されている、複数の小ブロックに大きなファイルは、それぞれが空間を表します
短所:により、より多くの、そして処理ブロックで構成ファイルストレージへとゆっくりと読んで
mongofiles -d dbnameは置くファイル
yangrui @ Ubuntuの:〜/ day9 $ mongofiles -d picture.jpg入れgrid_db
2019-07-22T13:51:02.243 + 0800に接続された:localhostの
ファイルを追加しました:picture.jpgを
データベースが存在しない場合は、自動的に作成されます。
> db.fs.files.find()
{ "_id":のObjectId( "5d354ec61d41c850f13fbecf" )、"チャンク":261120、 "uploadDate":ISODate( "2019-07-22T05:51:02.508Z")、「長さ":6487058、 "MD5": "df0a525105fc3b62bcddd62a52ed4926"、 "ファイル名": "picture.jpg"}
>
> db.fs.chunks.find()
{ "_id":のObjectId( "5d354ec61d41c850f13fbee3")、 "files_id":のObjectId( "5d354ec61d41c850f13fbecf" )、"N":19、 "データ":BINDATA(0、「D / tY8sjsfXrSdmrhzXZIjzIxudxcFOSV6D39KkjkbzU8zDJt4I6sT04 / z0qI71YoB5RCZBzlQ
fs.filesとfs.chunksはOBJECTIDを通じて仲間です
MongoDBはLinuxの中に保存されたドキュメントを取得から
yangrui @ Ubuntuの:〜$ mongofiles -d grid_db GET picture.jpg
長所:ファイルの数に収納しやすいと簡単なデータベースの移行ではなく、あまりにも多くの制限。
短所:低効率リーダー
カーソル:
なぜ、カーソルを使用します。
図1は、遅いデータ伝送をもたらす、ネットワークの輻輳を防止するため
2、バックエンドを解決することができ、ユーザーエクスペリエンスの解析を改善
> STU使用は
STU DBに切り替え
>変数を= db.class1.findカーソル()カーソルを作成します
cursor.hasNext()次のデータがあるかどうかを
> cursor.next()次のデータを取得
{
「_id」:のObjectId(「5d2ed0c9226651eee5c79df3」)、
「名前」:「劉」、
「趣味」:
「食べる」を、
"スリープ"、
「プレイピーズ
]、
"年齢":31、
" LOCATION ":"象牙の山"、
"性別":"女性"
}
>
PythonのことでのMongoDBデータベース操作
インストール
sudo PIP3はpymongoインストール
yangrui @ Ubuntuの:〜$ sudoをのpython3-ピップ安装PIP3をaptのインストール
yangrui @ Ubuntuの:〜$ sudoのはPIP3 pymongoをインストール
手順;
1、リンクされたオブジェクトのmongoデータベースを作成します
CONN = MongoClient( 'localhos'、27017)
2、本番データベースオブジェクト
デシベル= conn.stu
3、オブジェクトのコレクションの生産
my_set = db.class1
4、重合度のCRUDの動作
データを挿入します。
インサート()
insert_many()
insert_one()
保存する()
pymongo輸入MongoClientから
#リンクオブジェクト作成
CONN = MongoClientを( 'localhost'の 27017)
#オブジェクトの収集とデータベースオブジェクトを作成し
、DB = conn.stu
my_set = db.class1
#My_set.insert({ '名称': '劉ヘッド'、 '年齢' 50、 '趣味':[ '謝足'、 'ドリンク']})
文書#1の複数の挿入
([{ 'name'の#1 my_set.insert_many : ' :王を得る'、 '年齢' 55} 、{ '名前': ' 王'、 '年齢':76} ])
#1 my_set.insert_one({ '名称': ' 壁劉'、 '趣味':[ '劉'、 '2人']})
#1 my_set.save({ '名称': '趙シリコン'})
データを削除します。
削除({}、マルチ= TRUE)
マルチ:デフォルトはtrueで、すべての修飾されたデータを削除します
偽削除し表現のみに設定します
#My_set.remove({ '名称': '趙シリコン'})
すべてのドキュメントを削除するmy_set.remove()
データを探します
()を見つけます
機能:検索データベースの内容
パラメータ:モンゴシェルと同じ
戻り値:カーソルを返します。
イテレータ
カーソル
次()
カウント()
限定()
スキップ()
ソート()
mongoshell --------ソート({ '名称':1})
pymongo ------------ソート([( '名前'、1)])
***ソートする場合、必ずカーソルが訪問されていないことを確認
変更操作
更新()
同じパラメータおよび更新mongoshel
update_many()
複数のドキュメント、すべての変更に合わせたとき
update_one()
文書にのみ最初のマッチを変更します
あなたは=アップサートによって、真の一致しないドキュメントを変更したい場合は、直接ドキュメントを追加
my_set.update({ '名称': 'でき劉'}、{ '$セット' { '年齢': '45'、 '趣味':[ 'ダンス'、 'パフ']}}、UPSERT = TRUE)
**プログラミングプロセスMongoのデータ型のヌル、パイソンなしに用いてもよいです