従来のデータベースでは、データベースのデータを操作するために大量の SQL ステートメントを記述する必要があり、さらに、従来のリレーショナル データベースでテーブルを作成する際のさまざまなフィールドの処理も少し不十分でした。さらに、ajax テクノロジーの広範な適用と json 形式の広く受け入れも、mongo を開発者に近づけています。
mongo とアプリケーション シナリオの紹介
MongoDB は、json 形式で保存されるドキュメント指向の非リレーショナル データベース (NoSQL) です。 Mongo DB は、オブジェクト指向思考 (OO 思考) を非常にうまく実装しています。Mongo DB では、すべてのレコードが Document オブジェクトです。 Mongo DB の最大の利点は、すべてのデータ永続化操作で開発者が SQL ステートメントを手動で記述する必要がなく、メソッドを直接呼び出すことで CRUD 操作を簡単に実装できることです。
mongo は次のシナリオで使用できます:
ストレージの大きなサイズ、低価値のデータ
json およびオブジェクト型のデータ
Web サイトのキャッシュ データ
コメントとサブコメントには明らかな所属データがあります
複数のサーバー データ、その構築MapReduce では、グローバル トラバーサルを実装するのが非常に簡単です。
mongodb をインストールして使用します
Mongo は公式 Web サイト https://www.mongodb.org/ からダウンロードできます。すべてのコマンドは解凍後に使用できます。コンテンツ。
使用する前に最初に mongo.conf ファイルを設定します
port=xxxxx //代表端口号,如果不指定则默认为 27017 dbpath=/usr/local/mongodb/db //数据库路径 logpath=/usr/local/mongodb/logs/mongodb.log //日志路径 logappend=true //日志文件自动累加,而不是覆盖 fork=ture //以守护进程方式创建
データベースとデータテーブルは両方とも直接作成できます。つまり、切り替えずに直接使用できます。使用時に作成されます。また、mongo で js スクリプトを直接記述することもできます。 mongo の場合は、_id フィールドを指定しないと、mongo が自動的にフィールドを追加します。
mongo のさまざまなコマンド
Mongo のコマンドは、mongo のクエリを素晴らしく効率的にするために集められたものです。 mongo の各テーブルはコレクションと呼ばれます。コマンドの使用方法は、データベースに切り替えて各コレクションを直接操作します。そのコマンドは、メソッド (func())、クエリ本体 ({} で記述)、および演算子 ($ で始まる) で構成されます。
基本コマンド
show dbs //查看数据库 use dbname //切换到数据库 db.createCollection('collection') //创建数据表 db.collection.drop() //删除数据表 db.dropDatabase() //删数据库 db.collection.insert({data}) //插入数据 db.collection.find() //显示数据表内全部内容
クエリ本体
{key.attr.attr:value} //普通式 {key:{$ne|$gt|$gte|$lt|$lte|$in|$nin|$all:value}} //key满足 $oper value的值 {$or|$and|$not|$nor:[{key1:{$gt:value}},{key2:{$ne:value}}]} //用$oper同时限定key1,key2的条件 {key:{$mod{8,2}}} //取出key对8取余为2的值。 {key:{$exist:1}} //取出key列存在的值。 {key:{$type:String|Double|Array|Date|Object|Boolean|......}}//查询key类型为type的列 {key:{$regex:/pattern/}} //通过正则查询,效率较低 {$where:'this.attr.express.....'} //直接用where语句,二进制转为JS运算,较慢
find()メソッドの拡張
db.collection.find(query,{要取出的列:1,不需要的列:0}) db.collection.find(query).skip(跳过的行数).limit(限制信息条数); db.collection.find(query).explain() //与MYSQL的解释语句一样。 db.collection.remove(query,[justone]) //如不指定query,全部删除;[justone]默认为false意思是查询到多个,但只删一个。
updateステートメント
db.collection.update(query,{key:newvalue}) //注意:新值会覆盖旧值,即数据只剩下语句中定义的key db.collection.update(query, { $set:{key:newvalue}, $unset:{key:value}, $rename:{key:value}, $inc:{key:value}, ...... }, { multi:true, //改变所有符合条件的,默认为false upsert:true //没有的话刚添加,默认为false } )
Cursor
var cursorName=db.collection.fund(query,...)[.skip(num).limit(num)] //创建游标 cursorName.hasNext() //判断是否有下一个 printjson(cursorName.next()) //输出游标的下一个指向值 cursorName.forEach(function(Obj){process Obj}) //遍历操作游标
Index
db.collection.getIndexes() //查看索引 db.collection.ensureIndex({key:1/-1[,key.attr:1/-1]},{unique:1(是否唯一)},{sparse:1(是否非空)})// 添加正序/倒序索引 db.collection.dropIndex({key:1/2}) //删除索引 db.collection.reIndex() //重建用了很多出现杂乱的索引
MapReduce
MapReduceは非常に強力なトラバーサル操作ツールです。モンゴを使用します。それを実現するには、マップとリデュース関数を実装する必要があります
db.runCommand( { mapReduce: collection, //要操作的数据表 map: function(){emit(key1,key2)}, //对key1和key2进行数据映射 reduce: function(key,value){}, //对key值和数据组value进行操作 out: <output>, query: <document>, sort: <document>, limit: <number>, finalize: <function>, scope: <document>, jsMode: <boolean>, verbose: <boolean> } )
さらに詳細なコマンドは、mongo 中国語コミュニティ http://docs.mongetting.com/manual-zh/ で見つけることができます。
mongo ユーザー、データのインポート、エクスポート、クラスター
ユーザー管理
MongoDB はデフォルトでは認証を有効にしません。サーバーの起動時に --auth または --keyFile オプションを追加して、認証を有効にすることができます。構成ファイルを使用する場合は、security.authorization または security.keyFile 設定を使用します。
MongoDB は独自のロールを提供し、それぞれが一般的なユースケースに対して明確なロールを提供します。たとえば、read、readWrite、dbAdmin、root などのロールです。ユーザーの作成、ロールの作成、ユーザーへのさまざまなロールの割り当て/再利用によってユーザーを管理します。
ロールを追加するときは、まず管理データベースに管理者ロールを追加し、次に管理者ロールを使用して各ライブラリに異なるロールを追加する必要があります。
use admin;(切换到admin数据库,对此库操作) db.createUser( { user: "username", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) use database; db.auth('username','passwd');用超级管理员用户登陆后,整个mongo数据库皆可存取。
データのインポートとエクスポート
mongo/bin ディレクトリでは、インポートとエクスポートに mongo 独自のツールを使用します。データ交換を容易にするために、csv 形式でエクスポートするのが最適です。
./mongoexport -d dataname -c tablename -f key1,key2 -q 'query' -o ainname --csv//导出数据,默认为json格式 ./mongoimport -d dataname -c tablename --type json --file ./path //导入数据,默认为json格式
mongoデータベースクラスター
mongodを開くときにオプション--replSet replnameを追加します。
mongoクライアントのmongodプロセスに接続し、管理データベースに入り、mongoconf変数を宣言します:
use admin;
var rsconf ={_id: 'replname',members[{_id:0,host:'xxx'},{_id:1,host:'xxy'}]};
rs.initiatee(rsconf) を使用してクラスターを初期化します。 mongo は自動的に ID を変更します。最も小さい番号を持つプロセスがプライマリとして設定され、他の mongod プロセスはセカンダリとして設定されます。
セカンダリプロセスに接続し、slaveOk()関数を使用してスレーブプロセスを初期化します。
PHP での mongo データベースの操作
まず、php に mongo 拡張機能を追加します (方法については、Linux での PHP を参照してください)。これで、スクリプト内で mongo クラス関数ライブラリを使用できるようになります。
コアクラスが 1 つだけある他のクラス ライブラリとは異なり、mongo には 4 つのクラスがあります。つまり、
基本クラスである Mongo クラスには、グローバル データベースに接続、接続を閉じ、操作するためのメソッドがあります。
mongoDB クラス。Mongo クラスは selectDB() メソッドを通じて取得され、テーブルレベルの操作メソッドを持ちます。
MongoCollection クラスは、通常、Mongo->dbname->collection によって、または MongoDB クラスとデータベース名を直接使用してインスタンス化されます。これには、データに対する基本的な操作があります。
MongoCursor クラスは、find() メソッドを通じて MongoCollection から取得され、通常のカーソル トラバーサル操作を持ちます。
以下は典型的な mongo 操作です:
$mongo=new Mongo(); $mongo->connect('host',port); $collection=$mongo->dbname->collection; $cursor=$collection->find(); $cursor->operate(); $mongo->close();
cdnoss PHP での mongodb データベースのインストールと使用に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。