ホームページ  >  記事  >  バックエンド開発  >  PHPでのMongoDBの使用法

PHPでのMongoDBの使用法

巴扎黑
巴扎黑オリジナル
2016-11-09 14:00:121378ブラウズ

1. Mongodb の基本概念
1. Mongodb データベースの命名規則:
空の文字列 ("") は使用できません
'' (スペース)、.、$、/、および

D:mongodbbin>mongo
または、Windows エクスプローラーで C:mongobin に移動し、mongo.exe をダブルクリックします。
どの方法を選択してもシェルが表示されます。
MongoDB シェル バージョン: 1.6.5
接続先: test
>
これで、テスト サーバーに接続されました。
2.Linux での MongoDB のインストールと構成
1. 32 ビット linux の場合
$curl http://downloads.mongodb.org/linux/mongodb-linux-i686-1.4.4.tgz > mongo.tgz
$ tar xzf mongo.tgz
64 ビット linux の場合
$curl http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.4.4.tgz > mongo.tgz
$ tar xzf mongo.tgz そうでない場合curl をインストールします。まず、apt-get をインストールします。curl をインストールします。 デフォルトでは、MongoDB はデータを /data/db/ フォルダーに保存します。このフォルダーは手動で作成する必要があります。 次のように作成します。 $ adduser mongodb $ passwd mongodb $ sudo mkdir -p /data/db/ $ sudo chown `id -u` /data/db $ chown -R mongodb:mongodb /data もちろん、次のように指定することもできます。 --dbpath コマンド MongoDB はデータを別のディレクトリに保存します。
3. コンソールでデータベースを実行します: $ nohup ./mongodb-xxxxxxx/bin/mongod & $ ./mongodb-xxxxxxx/bin/mongo > db.foo.save( { a : 1 } ) > db.foo .find() の結果は次のようになります: { "_id" : ObjectId("4cd181a31415ffb41a094f43"), "a" : 1 } OK! !
2つ。 Mongodb の手順と関連操作
a) show コマンド
ii. 現在のすべてのデータベースを表示するには、dos に show db を入力します
> show dbs
admin
alphabet
color
colors
local
mymongo
test
>
iii. show collections view All現在のデータベースの下のテーブル
> use mymongo
db mymongo に切り替え
> show collections
colors
shell.colors
system.indexes
>
b) 現在使用する必要があるデータベースを指定します
i。新しいライブラリを作成します。このライブラリにデータがない場合は、一定期間後にシステムが破棄されます
ii. [データベース名] を使用します
i) データを追加します。データ形式は json 形式です
ii。 insertで追加したデータにtableを追加すると、新しいテーブルが作成され、テーブルにデータが追加されます
iii. db.[テーブル名].insert()
> db.dingdan.insert(
... {
... order_id: 109384,
.. Order_date: new Date("12/04/2010"),
... 顧客: {
... 名前: "Joe Bloggs"、
... 会社: " XYZ Inc.」、
... 電話 : "(555) 123-4567"
... }、
... 支払い: {
... タイプ: "現金"、
... 金額: 4075.99、
...paid_in_full: true
.. . .
...説明: 「高価な製品」、
...数量: 2,
...price_per _unit: 2000
.. .}, ...], c ... レジ係 ID: 340582242
...}
...)
D) 手順の保存
Ii データの保存
Iiテーブルにデータがない場合は
iii. このデータがテーブルに存在する場合は、新しいデータを変更します
db.[テーブル名].save()
db.collection.save( x )
x は更新するオブジェクトです。単一レコードのみを指定できます。
コレクション内に x オブジェクトと同じ「_id」を持つレコードが既に存在する場合。 Mongodb はコレクション内の既存のレコードを x オブジェクトに置き換えます。それ以外の場合、x に _id がない場合は、システムが自動的に _id を生成して挿入します。これは、上記の update ステートメントの upsert=true および multi=false の状況と同等です。

db.test0.save({count:40,test1:"OK"}); test0 の場合、_id システムは
db.test0.save({_id:40,count:40,test1:"OK"}) を生成します。 40 に等しい _id がある場合は置き換えられ、そうでない場合は挿入されます。
e) 削除コマンド
i. テーブル内の指定されたデータを削除します
ii. db.[テーブル名].remove()
カラーテーブルにレコードを追加します
> db.colors.save({"color" : "112233"})
> db.colors.find()
{ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2374fadb58af17b2f02"), " color " : "ff0000" }
{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f04"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : "ff0000" }
{ "_id" : ObjectId(" 4e9b c23a4fadb58af17b2f07 "), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f08"), "color" : "ff0000" }
{ "_id" : 17b2f09")、"カラー" : " ff0000" }
{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0a"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0b"), "color" : "ff0000" }
{ " _id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9e3f435240000000005a2d"), "color" : "112233" }
追加したレコードを削除します
> .カラー。 Remove({"color":"112233"})
> db.colors.find()
{ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }
{ "_id" : ObjectId( "4e9bc2374fadb58af17b2f02"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58 17b2f04"),"色" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : "ff0000" }
{ " _id" : ObjectId("4e9bc23a4fadb58af17b2f07")、"color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f08")、 "color" : "ff0000" }
{ "_id" : 9b c23b4fadb58af17b2f09" ), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0a"), "color" : "ff0000" }
{ "_id" : "4e9bc23c4fadb58af17b2" f0b")、"色" : "ff0000 " }
{ "_id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000" }
f) 更新コマンド
i. db.[テーブル名].update()
db .collection .update( criteria, objNew, upsert, multi )

criteria:

objNew と同様のクエリ条件の更新 SQL 更新クエリの後の部分: オブジェクトと一部の更新演算子 ($、$inc... など) など.、SQL 更新クエリで設定した後の
upsert としても理解できます。このパラメーターは、更新レコードがない場合に objNew を挿入するかどうかを意味し、true は挿入を意味し、デフォルトは false で挿入しません。
multi: mongodb のデフォルト値は false で、最初に見つかったレコードのみが更新されます。このパラメーターが true の場合、条件に従って見つかった複数のレコードがすべて更新されます。

例:

db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); test0 の最初のレコードのみが更新されます。 .update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); すべて更新されました
db.test0.update( { "count " : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 最初の 1 つだけが追加されました
db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); すべて追加されました
db.test0.update( { "count" : { $gt : 15 } } , { $inc : { "カウント" : 1} },false,true );すべて更新されました
db.test0.update( { "カウント" : { $gt : 10 } } , { $inc : { "カウント" : 1} },false ,false );最初のもののみを更新しました

g) Find コマンド
i. データをクエリし、スキップおよび制限メソッドとともに使用してページング効果を実現できます。
ii. db.[テーブル名].find({}).skip([num1]).limit([num2])、num1 はどのデータから始まり、不足している場合は num2 がクエリされたデータの数になります。 data の場合、残りのデータが優先されます
iii. db.[テーブル名].find({[_id:{ < : num }]}) 括弧はクエリ条件と、「より大きい」や「より小さい」などの関係演算子の例です。翻訳文字を使用して置き換えます。
> zm を使用します
db zm に切り替えました
> db.zm.find().skip(10).limit(5);
{ "_id" : ObjectId("4e9e3d6b5240000000005a1c"), "char" : "k", "コード" : 107 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1d"), "char" : "l", "code" : 108 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1e"), "char" : "M"、 "code":109} {"_id":objectId( "4e9e3d6b5240000000005a1f")、 "char": "n"、 "code":110}
{"_id":objectid( "4e9e3d6b524000000000000000005a20")、 "char" : "o", "code" : 111 }
>
h) findOne コマンド
i. 指定されたクエリ内の最初のコマンドをクエリします
ii. db.[テーブル名].findOne()
> db. .findOne()
{ "_id" : ObjectId("4e9e3d6b5240000000005a12"), "char" : "a", "code" : 97 }
注: findOne の O は大文字にする必要があります。
i) function
i. カスタム関数、定義後に直接呼び出すことができます
ii. function testFunction(op1,op2,op3……){}
iii.「testFunction」: function(op1,op2,op3……) {}
iv. 定義された関数は直接呼び出すことができ、return を使用してデータを返すことができます
> function testFunction(){
... db.zm.remove({"code":{$in:[100,101,102,103] }})
... return db.zm.find({})
... }
> testFunction()
{ "_id" : ObjectId("4e9e3d6b5240000000005a12"), "char" : "a", "code " : 97 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a13"), "char" : "b", "code" : 98 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a14"), "char" : "c ", " code" : 99 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a19"), "char" : "h", "code" : 104 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1a"), "char " : " i", "code" : 105 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1b"), "char" : "j", "code" : 106 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1c") 」 ), " char" : "k", "code" : 107 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1d"), "char" : "l", "code" : 108 }
{ "_id" : ObjectId ("4e9e3d6b5240000000005a1e "), "char" : "m", "code" : 109 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1f"), "char" : "n", "code" : 110 }
{ " _id" : ObjectId("4e9e3d6b5240000000005a20"), "char" : "o", "code" : 111 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a21"), "char" : "p", "code" : 112 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a22"), "char" : "q", "code" : 113 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a23"), "char" : "r", "コード" : 114 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a24"), "char" : "s", "code" : 115 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a25"), "char" : 」 t", "code" : 116 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a26"), "char" : "u", "code" : 117 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a27"), 」 char" : "v"、"code" : 118 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a28")、 "char" : "w"、 "code" : 119 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a28") 29 "), "char" : "x", "code" : 120 }
has more
j) var
i. 変数の名前付け type
ii. は JS の var と同じです。
1. var [name] の命名も、js 変数の命名規則と一致しています。
k) print コマンド
i. 印刷に使用されます
ii. print([Strings]);
iii. 印刷オブジェクトが mongo データである場合、それは認識されません。
l) printJson コマンド
i. printJson([json]);
m) shutdown
i. > データベース名を使用して
admin
>db.shutdownServer () を実行します。 ;
サーバーがダウンしているはずです…
MongoDB は、次のようなさまざまな条件演算子をサポートしています:
? $lt (より小さい)
? $gt (より大きい)
?または等しい)
? $exists (フィールドが存在するかどうかを確認する)
? $ne (等しくない)
?配列内の 1 つ以上の値
? $type (指定された BSON データ型と一致する値)
? $not (等しくない)
db.tablename.find({fieldname:{$gt:100} })
mongodb 更新演算子:

1 ) $inc

Usage: { $inc : { field : value } }

は、数値フィールドに値を追加することを意味します。例:

> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 16, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST" ", "test4" : "OK", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : 1 } } );
> db.test0.find( { "_id" : 15 } );
{ " _id" : { "floatAbout" : 15 }, "count" : 17, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST", "test4" : "OK", " test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : 2 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 19, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST", " test4" : "OK", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : -1 } } );
> db .test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST", "test4" : "OK", "test5" : "OK" }


2) $set

使用法: { $set : { field : value } }

は以下と同等ですSQL の set フィールド = 値、すべてのデータ型が $set をサポートします。例:
> db.test0.update( { "_id" : 15 } , { $set : { "test1" : "testv1","test2" : "testv2","test3" : "testv3","test4" : "testv4" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : " testv1", "test2" : "testv2", "test3" : "testv3", "test4" : "testv4", "test5" : "OK" }

3) $unset

使用法: { $unset : { field : 1} }

その名の通り、フィールドを削除することです。例:
> db.test0.update( { "_id" : 15 } , { $unset : { "test1":1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }、 "count" : 18、 "test2" : "testv2"、 "test3" : "testv3"、 "test4" : "testv4"、 "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $unset : { "test2": 0 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test3" : "testv3", "test4" : "testv4", "test5" : "OK" }

> db.test0. update( { "_id" : 15 } , { $unset : { "test3":asdfasf } } );
金曜日 5 月 14 日 16:17:38 JS エラー: ReferenceError: asdfasf が定義されていません (シェル):0

> db.test0.update( { "_id" : 15 } , { $unset : { "test3":"test" } } );
> db.test0.find( { "_id" : 15 } );
{ " _id" : { "floatAbout" : 15 }, "count" : 18, "test4" : "testv4", "test5" : "OK" }

フィールド : 1 の 1 が何であるかわかりませんでした、とにかく何かがある限り。

4) $push
使用法: { $push : { field : value } }

フィールドに値を追加します。フィールドが存在しない場合は、新しい配列型が追加されます。 。例:

> db.test0.update( { "_id" : 15 } , { $set : { "test1" : ["aaa","bbb"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb" ], "test4" : "testv4", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $push : { "test1": "ccc" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" ], "test4" : "testv4", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $push : { "test2": "ccc" } } );
> db.test0 .find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $push : { "test1 ": ["ddd","eee"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18、「test1」:[「aaa」、「bbb」、「ccc」、[「ddd」、「eee」] ]、「test2」:[「ccc」]、「test4」:「testv4」、「test5」 " : "OK" }
5) $pushAll

使用法: { $pushAll : { field : value_array } }

$push と同じですが、複数の値を一度に配列フィールドに追加できる点が異なります。例:

> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "aaa", " bbb", "ccc", [ "ddd", "eee" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }

> db.test0 .update( { "_id" : 15 } , { $pushAll : { "test1": ["fff","ggg"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc", [ "ddd", "eee" ], "fff" 、"ggg" ]、"test2" : [ "ccc" ]、"test4" : "testv4"、"test5" : "OK" }

6)$addToSet
Usage: { $addToSet : { フィールド : 値 } }

配列に値を追加します。値が配列にない場合にのみ追加します。例:
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": {$each : ["444","555"] } } } );
> db.test0 .find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc ",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444",
"555"
]、"test2" : [ "ccc" ]、"test4" : "testv4"、"test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { " test1": {$each : ["444","555"] } } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg ",
[
"111",
"222"
],
"444",
"555"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": ["444","555"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
「ddd」、
「eee」
]、
「fff」、
「ggg」、
[
「111」、
「222」
]、
「444」、
「555」、
[
] "444",
"555"
]
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id " : 15 } , { $addToSet : { "test1": ["444","555"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
" fff",
"ggg",
[
"111",
"222"
],
"444",
"555",
[
"444",
"555"
]
], "test2 " : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }


7) $pop

配列内の値を削除します

Usage:
最後の値を削除します: { $pop : { field : 1 } }
最初の値を削除します: { $pop : { field : -1 } }

削除できる値は 1 つだけであることに注意してください。つまり、使用できるのは 1 または -1 だけであり、Use は使用できません。 2 つの項目を削除するには 2 または -2。 mongodb 1.1 以降のバージョンのみを使用できます。例:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, " test1" : [
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444"
]、"test2" : [ "ccc" ]、"test4" : "testv4"、"test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1": -1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count " : 18, "test1" : [
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
] ,
"444"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1" : 1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18 、 "test1" : [ "ccc"、 [ "ddd"、 "eee" ]、 "fff"、 "ggg"、 [ "111"、 "222" ] ]、 "test2" : [ "ccc" ]、 " test4" : "testv4",
"test5" : "OK" }

8) $pull

Usage: $pull : { field : value } }

value と等しい値を配列フィールドから削除します。例:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "ccc", [ " ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4",
"test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $pull : { "test1": "ggg" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", [ "111 ", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
: "OK" }

9) $pullAll

使用法: { $pullAll : { field : value_array } }

$pullと同様に、配列内の複数の値を一度に削除できます。例:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ "ccc", [ " ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
: "OK" }

> db.test0.update( { "_id" : 15 } , { $pullAll : { "test1": [ "ccc" , "fff" ] } } );
> db.test0.find( { "_id " : 15 } );
{ "_id" : { "floatAbout" : 15 }, "count" : 18, "test1" : [ [ "ddd", "eee" ], [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }


10) $ 演算子

$ は独自の意味で、次に従って調べることを意味します。条件 配列内の項目はそれ自体です。
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1} }, false, true )

> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "投票" : 4 }, { "投稿者" : "ジェーン", "投票" : 7 } ] }

$ は最初に見つかった配列項目のみを適用し、残りは無視されることに注意してください。例を見てみましょう:

> t.find();
{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 2, 3, 2 ] }
> t.update({x : 2 }, {$inc: {"x.$": 1}}, false, true);
> t.find();

$ を $unset と一緒に使用すると、null が残ることにも注意してくださいただし、{$pull:{x:null}} を使用すると、null のすべての配列項目を削除できます。例:
> t.insert({x: [1,2,3,4,3,2,3,4]})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, 3, 4, 3, 2, 3, 4 ] }
> t.update({x:3}, {$unset:{"x.$":1}})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, null, 4, 3, 2, 3, 4 ] }

{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 3, 3, 2 ] }
Mongodb でのインデックスの作成:
db.[テーブル名].ensureIndex({num1: 1,num2 :-1}) num1 と num2 は、インデックスを作成するために使用されるフィールドです。
(1) どのような種類のクエリが実行されるか。どのキーにインデックスを付ける必要があるか?
(2). 各キーのインデックスの方向は何ですか?
(3). 拡張にどう対処するか?頻繁に使用されるデータをより多くメモリに保持できるように、別のキーの配置はありますか。
db.[テーブル名].ensureIndex({num1: 1,num2:-1}, {"background":true})//長期インデックスを変更します
db.runCommand({"dropIndexes": "foo", "index":"alphabet"})
すべてのインデックスを削除したい場合は、indexの値を*に代入できます。
Mongodb のマスター/スレーブ レプリケーション
マスター/スレーブ レプリケーションは、データベースのバックアップ、障害回復、読み取り拡張などに使用できます。 (現在、スレーブ ノードから複製するメカニズムはありません)。
1. mongod –master を実行してマスターサーバーを起動します。
2. mongod –slave –source master_address を実行してスレーブサーバーを起動します。 (master_address はマスター ノードのアドレスです)
3. マスター ノードのディレクトリを作成し、ポート (10000) をバインドします:
$mkdir –p ~/dbs/master
$ ./mongod –dbpath ~/dbs/master –port 10000 –master
4. スレーブノードのディレクトリを設定します (別のディレクトリとポートを選択します)
$mkdir –p ~/dbs/slave
$ ./mongod –dbpath ~/dbs/slave –port 10001 –slave –source
localhost: 10000
オプション: -only (スレーブ ノードから特定のデータベースのみをコピーするように指定します)
-slavelay (マスター ノードの操作を適用するときに遅延を増やすためにスレーブ ノードで使用されます)
-fastsync (に基づく)マスター ノードのデータ スナップショット) スレーブ ノードを起動し、マスターとスレーブの同期を実装します)
-autoresync (マスターとスレーブの同期を自動的に復元します)
-oplogSize (マスター ノードの oplog のサイズ (MB))
3 つ。 Mongodb の GridFS
mongodb は大規模なデータ ストレージをサポートしているため、mongodb には大規模なデータ ストレージをサポートできる分散ファイル システム GirdFS も付属しています。mongodb には最大サイズ 4MB の BSON ドキュメント オブジェクトもあり、大量のデータを保存できます。データの。サイズ制限がない場合でも、BSON はビッグデータに対する高速範囲クエリを満たすことができないため、mongodb は GridFS を導入しました。
4. PHP のコードを使用したテスト:
MySQL と同様、mongoDB は PHP 拡張ライブラリ .dll の形式で PHP と統合されています。
次の Web サイトにアクセスして、Windows で対応する PHP バージョンの dll ファイルをダウンロードします:
http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows
PHP に従ってバージョンとスレッド セキュリティ (phpinfo で表示可能) かどうかなどを確認して、対応するバージョンを選択してダウンロードし、解凍し、php_mongo.dll ファイルを取得します。これを PHP インストール ディレクトリの ext ディレクトリにコピーします。 php.ini ファイルに extension = php_mongo.dll を追加します。
Web サーバー (Apache または nginx) を再起動します。 phpinfo で mingoDB 情報を確認できるはずです。そうでない場合は、インストールに問題があります。ダウンロードした mingoDB 拡張機能が間違っている可能性があります。
Php は mongodb を操作します
1. mongoDB との接続を確立します:
mongo クラスを直接インスタンス化して接続を作成します:
$mo = new Mongo();//Mongo 接続オブジェクトを取得します
Mongo クラスをインスタンス化し、それをデフォルト localhost:27017 ポートで mongoDB への接続を確立します。
他のホストに接続したい場合は、次のように記述できます:
$mongo = new Mongo("mongodb://username:password@192.168.1.22:12345");
もう 1 つの方法は、mongo クラスをインスタンス化し、次に手動で接続を確立します:
$mongo= newMongo("mongodb://username:password@192.168.1.22:12345", array('connect'=>false));//初期化クラス
$mongo->connect( );/ / 接続を作成します
Mongo クラスのいくつかの便利なメソッド:
Mongo::listDBs()
現在の mongo サービスのライブラリ (DB) 情報を含む配列を返します。
$mo = new Mongo();
$dbs = $mo->listDBs();//データベース情報を含む配列を取得します
Mongo::selectCollection($db,$coll)
現在の接続コレクションの下の配列を返しますデータベース内のオブジェクト。
$mo = new Mongo();
$coll = $mo->selectCollection('db','mycoll');//コレクション オブジェクトを取得します
必要なデータベース (Mongo クラス) を選択します:
一方向:
$ mongo = new Mongo();
$db = $mongo->foo;//MongoDB オブジェクトを取得します
別の方法:
$mongo = new Mongo();
$db = $mongo->selectDB( 'foo') ;//MongoDB オブジェクトを取得します
MongoDB の便利な関数:
MongoDB オブジェクトを作成します
$mo = new Mongo();
$db = new MongoDB($mo,'dbname');//Pass MongoDB オブジェクトを作成します
現在の DB を削除します
$db = $mo->dbname;
$db->drop();
現在のデータベース名を取得します
$db = $mo->dbname;
$db->_tostring ();
Select目的のコレクション:
A:
$mo = new Mongo();
$coll = $mo->dbname->collname;//コレクション オブジェクトを取得します
B:
$db = $mo ->selectDB('dbname ');
$coll = $db->collname;
C:
$db = $mo->dbname;
$coll = $db->selectCollectoin('collname');// コレクション オブジェクトを取得します
データの挿入 (MongoCollection オブジェクト):
MongoCollection::insert(array $a,array $options)
array $a 挿入される配列
array $options options
safe 演算結果情報を返すかどうか
fsync に直接挿入するかどうか物理ハードディスク

$coll = $mo->db->foo;
$a = array('a'=>'b');
$options = array('safe'=>true);
$ rs =$coll- >insert($a,$options);
$rs は操作情報を含む配列型の配列です
データベース内のレコードを削除します (MongoCollection オブジェクト):
MongoCollection::remove(array $criteria,array $ options)
array $criteria Condition
array $options Options
safe 演算結果を返すかどうか
fsync 物理ハードディスクに直接影響するかどうか
justOne 1つのレコードにのみ影響するかどうか

$coll = $mo->db-> coll;
$c = array( 'a'=>1,'s'=>array('$lt'=>100));
$options = array('safe'=>true);
$rs = $coll->remove($c ,$options);
$rs は操作情報を含む配列型の配列です
データベース内のレコードを更新します (MongoCollection オブジェクト):
MongoCollection::update(array $criceria,array $newobj, array $options)
array $ criteria 条件
array $newobj 更新する内容
array $options オプション
safe 演算結果を返すかどうか
fsync 物理ハードディスクに直接影響するかどうか
upsert 物理ハードディスクがある場合に新規追加するかどうか一致するデータはありません
multiple 条件を満たすすべてのレコードに影響するかどうか、デフォルトでは 1 つの項目のみが影響を受けます

$coll = $mo->db->coll;
$c = array('a'=>1, 's'=>array('$lt'=>100));
$newobj = array('e'=>'f','x'=>'y');
$options = array('safe '=>true,'multiple'=>true);
$rs = $ coll->remove($c,$newobj,$options);
$rs は操作情報を含む配列型の配列です
コレクションをクエリして単一レコードの取得 (MongoCollection クラス):
array MongoCollection::findOne(array $query, array $fields)
array $query 条件
array $fields 取得するフィールド

$coll = $mo->db-> coll;
$query = array('s'=>array('$lt'=> 100));
$fields = array('a'=>true,'b'=>true);
$rs = $coll->findOne($query,$fields);
結果があれば配列を返し、結果がなければNULLを返します
複数のレコードを取得するクエリコレクション(MongoCollectionクラス):
MongoCursor MongoCollection::find (array $query, array $fields)
array $query 条件
array $fields 取得するフィールド

$ coll = $mo->db->coll;
$query = array('=>array(' $lt'=>100));
$fields = array('a'=>true,'b' =>true);
$cursor = $coll->find($query,$fields);
を返しますカーソル レコード オブジェクト MongoCursor。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。