MongoDB
CRUD操作
サーチ…
構文
- 挿入( 文書または文書の配列 )
- insertOne( 'document'、{writeConcern: 'document'})
- insertMany({[ドキュメント1、ドキュメント2、...]}、{writeConcern:document、ordered:boolean})
- 検索( クエリ 、 投影 )
- findOne( クエリ 、 投影 )
- 更新( クエリ 、 更新 )
- updateOne( query 、 update 、{upsert:boolean、writeConcern:document})
- updateMany( query 、 update 、{upsert:boolean、writeConcern:document})
- replaceOne( クエリ 、 置換 、{upsert:ブール値、writeConcern:ドキュメント})
- remove( query 、 justOne )
- findAndModify( クエリ 、 ソート 、 更新 、 オプション[オプション] )
備考
ドキュメントの更新と削除は注意深く行う必要があります。操作は複数のドキュメントに影響する可能性があるためです。
作成する
db.people.insert({name: 'Tom', age: 28});
または
db.people.save({name: 'Tom', age: 28});
save
との違いは、渡されたドキュメントに_id
フィールドが含まれている場合、その_id
持つドキュメントがすでに存在する場合は、新しいものとして追加される代わりに更新されます。
MongoDB 3.2.xのコレクションにドキュメントを挿入する2つの新しいメソッド:
1つのレコードだけを挿入するには、 insertOne
を使用します。
db.people.insertOne({name: 'Tom', age: 28});
複数のレコードを挿入するには、 insertMany
を使用します。
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
insert
は公式言語ドライバのバージョン3.0以降で非推奨となっていることに注意してください。完全に区別すると、シェルメソッドは実際にメソッドを実装する際に他のドライバよりも遅れていました。他のすべてのCRUDメソッドにも同じことが適用されます
更新
オブジェクト全体を更新する:
db.people.update({name: 'Tom'}, {age: 29, name: 'Tom'})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace only first matching document.
db.people.updateMany({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace all matching documents.
または、ドキュメントの1つのフィールドを更新するだけです。この場合、 age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
3つ目のパラメータを追加することにより、複数のドキュメントを同時に更新することもできます。このクエリは、名前がTom
と等しいすべてのドキュメントを更新します。
db.people.update({name: 'Tom'}, {$set: {age: 29}}, {multi: true})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{$set:{age: 30}) //Will update only first matching document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30}}) //Will update all matching documents.
新しいフィールドが更新されると、そのフィールドがドキュメントに追加されます。
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
ドキュメントを交換する必要がある場合は、
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
に使える。
注 :オブジェクトを識別するために使用するフィールドは、更新されたドキュメントに保存されます。更新セクションで定義されていないフィールドは文書から削除されます。
削除
クエリパラメータに一致するすべてのドキュメントを削除します。
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
またはただ一つ
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
MongoDBのremove()
メソッド。このコマンドを引数なしで実行するか空の引数を指定しないと、すべてのドキュメントがコレクションから削除されます。
db.people.remove();
または
db.people.remove({});
読む
name
コレクションの値が'Tom'
のpeople
コレクション内のすべてのドキュメントをクエリします。
db.people.find({name: 'Tom'})
または最初のものだけ:
db.people.findOne({name: 'Tom'})
また、フィールド選択パラメータを渡すことで、返すフィールドを指定することもできます。次のフィールドは_id
フィールドを除外し、 age
フィールドのみを含みます:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
注:デフォルトでは、要求していなくても_id
フィールドが返されます。あなたが取得していない希望の場合は_id
背中、あなただけの前の例に従うことができますし、を求める_id
指定することによって除外される_id: 0
(または_id: false
あなたはアドレスオブジェクトは、国が含まれているように、サブレコードを検索したい.IF) 、都市など
db.people.find({'address.country': 'US'})
必要に応じてフィールドも指定
db.people.find({'address.country': 'US'}, {'name': true, 'address.city': true})Remember that the result has a `.pretty()` method that pretty-prints resulting JSON:
db.people.find().pretty()
より多くの更新演算子
ドキュメントを更新するときに$set
以外の演算子を使うことができます。 $push
演算子を使用すると、値を配列にプッシュできます。この場合、 nicknames
配列に新しいニックネームを追加します。
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
$pull
オペレータはの反対である$push
、あなたが配列から特定の項目を引くことができます。
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
$pop
演算子を使用すると、配列から最初または最後の値を削除できます。 Tomのドキュメントに、 ['Marie', 'Bob', 'Kevin', 'Alex']
という値を持つ兄弟というプロパティがあるとしましょう。
db.people.update({name: 'Tom'}, {$pop: {siblings: -1}})
// This will remove the first value from the siblings array, which is 'Marie' in this case.
db.people.update({name: 'Tom'}, {$pop: {siblings: 1}})
// This will remove the last value from the siblings array, which is 'Alex' in this case.
複数のドキュメントを更新する際の "multi"パラメータ
コレクション内の複数のドキュメントを更新するには、multiオプションをtrueに設定します。
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
マルチはオプションです。 trueに設定すると、照会基準を満たす複数の文書が更新されます。 falseに設定すると、1つのドキュメントが更新されます。デフォルト値はfalseです。
{title}: "NoSQL Overview"} {"_id":ObjectID(59835487adf45ec6)、 "title" ObjectId(59835487adf45ec7)、 "title": "チュートリアルポイントの概要"}
db.mycol.update({'title': 'MongoDB概要'}、{$ set:{'タイトル': '新しいMongoDBチュートリアル'}}、{マルチ:真})
埋め込みドキュメントの更新
次のスキーマの場合:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
マークが50のトムのマークを55に更新する(ポジション演算子$を使用):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
次のスキーマの場合:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
トムの英語のマークを85に更新する:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
上記の例を説明する:
{name: "Tom"、 "marks.subject": "English"}を使用すると、マーク配列内のオブジェクトの位置が得られます。ここでsubjectは英語です。 "marks。$ marks"では、$はマーク配列のその位置を更新するために使用されます
配列の値を更新する
位置$演算子は、配列内の要素の位置を明示的に指定せずに更新する配列内の要素を識別します。
次の書類を持っている収集学生を考えてみましょう:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
最初のドキュメントのグレード配列で80から82を更新するには、配列内の要素の位置がわからない場合は、位置$演算子を使用します。
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)