1. ホーム
  2. データベース
  3. モンゴルディーブ

多階層ドキュメントのMongoDBによるデータ更新方法

2022-01-19 04:53:43

ネストされた配列の更新

次のデータ(データセット名はauthor)を例とする。

{name: 'Island Coder', documents: ['Getting Started with Flutter and Hands-On', 'High Performance MySQL', 'MongoDB Pro Guide']}


MongoDB Professional NorthをMongoDB Unprofessional Northに変更する必要がありますが、これはネストしたドキュメントデータの修正になります。今回は、MongoDB が提供するロケート演算子 $ を使う必要があります。ロケート演算子とは、対応する条件にマッチするデータを意味し、例えば次のようになります。

db.author.update(
  {name: 'Island coder', documents: 'MongoDB Professional North' }, 
  {'$set': {'documents.$': 'MongoDB not pro north'}}
);


配列である下位ノードも同様である。

{
  name: 'Island Coder', 
  documents: [
    {name: 'Getting Started with Flutter', score: 80}, 
    {name: 'High Performance MySQL', score: 90}, 
    {name: 'MongoDB Professional Guide', score: 85}
  ]
}


documengsノードの名前とスコアを変更する必要があります。

db.author.update(
  {name: 'Island coder', 'documents.name': 'MongoDB Pro Guide'},
  {'$set': {
    	'documents.$.name': 'MongoDB Unprofessional North', 
    	'documents.$.score':88}
  }
);


演算子$locationは、クエリ条件で見つかった配列中のデータ要素の位置で、その位置のデータに対する操作であることを意味します。

下位文書のプロパティを更新する

下位文書の属性を更新する場合、属性アクセッサ "." を直接使用することができます。 たとえば、次のように更新して、praise を 291 に増加させる必要があります。

{
  name: 'Island Coder', 
  scores: {
    view: 18800, 
    praise: 290, 
    followers: 105
	}
}


db.author.update(
  {name: 'Island coder'}, 
  {'$set': {'scores.praise': 291}}
);


以下のデータのように、配列が入れ子になっている下位のドキュメントでも同様の操作を行い、"Public" を "WeChat Public" に置き換える必要があります。

{
  name: 'Island Coder', 
  scores: {
    view: 18800, 
    praise: 290, 
    followers: 105,
    platform: ['Nuggets', 'Public']
	}
}


db.author.update(
  {'name': 'Island Coder', 'scores.platform': 'Public' }
  {'$set': {'scores.platform.$': 'WeChat Public'}}
);


属性の追加と削除

MongoDB には、属性を追加したり削除したりするためのディレクティブ $push と $pull があります。また、配列の最初や最後の値を削除する $pop もあります。ここでは、前のドキュメントに homepage 属性を追加しています。

db.author.update(
  {name: 'Island Coder'}, 
  {$push: {homepage: 'https://juejin.cn/user/70787819648695'}}
);


これは homepage という配列を挿入しており、その要素のひとつが juejin.cn/user/707878... であることに注意してください。配列に含まれない属性を追加する場合は、$set ディレクティブを使用します。マッチする属性を削除するには、pull を使用します。

db.author.update(
  {name: 'Island Coder'}, 
  {$pull: {homepage: 'https://juejin.cn/user/70787819648695'}}
);


pop操作は、数字-1と1を使って最初と最後の要素を削除し、下のデータについては、配列のプラットフォームのデータを削除します。

{
  name: 'Island Coder',
	scores : {
		view: 18800,
		praise: 290,
		followers: 105,
		platform: ['Nuggets', 'Public', 'Other1', 'Other2']
	}
}


// Remove the first element
db.author.update({name: 'Island Coder'}, {$pop: {'scores.platform': -1}});
// Remove the last element
db.author.update({name: 'Island coder'}, {$pop: {'scores.platform': 1}});


概要

この記事では MongoDB のネストした属性更新操作について、 ロケート演算子 $ の使い方を中心に説明します。 ロケート演算子を使うと、変更したいデータの場所を特定して更新操作を行うことができます。属性の追加や削除と同様に、$push、$pull、$pop ディレクティブで応答することができます。

上記はMongoDBが多階層ドキュメントのデータを更新する方法の詳細です。MongoDBの多階層ドキュメントの更新についての詳細は、スクリプトハウスの他の関連記事に注意してください!.