MongoDBのオブジェクトフィールドから配列を削除します

アンドレ・クリストガ・プラマディティヤ

配列要素のObjectIdを介してそれを見つけるだけで、配列の要素を削除しようとしています。以下の「$ removeFromSet」に$ addToSetのMongoDBの反対側、私はやることができていたはず。

db.collection.update(
  {name: 'nameOfNode'}, 
  {$pull: { activities: ["5e7d16e9736bb64bdd158c13"]}})

または

db.collection.update(
  {name: 'nameOfNode'}, 
  {$pull: { activities: ["5e7d16e9736bb64bdd158c13", "Materi"]}})

しかし、上記の両方のコードは機能しません。1つの値だけでそれらを削除する別の方法がある場合、またはそれが不可能な場合は、2つの値でそれらを削除しますか?

現在のデータスキーマ

注:スクリーンショットから一部の機密情報を削除したため、文字間の想定されるギャップはスペースではなく、カバーされたテキストです。私がそれらを参照するために使用しようとした文字列は同じですが、違いはありません。

ジョー

コードに2つの問題があります。-値はactivities配列のメンバーではなく、配列に含まれる配列のメンバーですactivities-のような文字列を検索すると、activities: ["5e7d16e9736bb64bdd158c13"]ObjectIdタイプの値と一致しません。

ObjectIdのマッチングの簡単なデモンストレーションを実行しました。

MongoDB Enterprise replset:PRIMARY> db.updtest.find()  
{ "_id" : ObjectId("5e7d354ccede22b56b5335bc"), "name" : "nameOfNode", "activities" : [ [ ObjectId("5e7d354ccede22b56b5335b9"), "Check-in" ], [ ObjectId("5e7d354ccede22b56b5335ba"), "Materi" ], [ ObjectId("5e7d354ccede22b56b5335bb"), "Materi" ] ] }

MongoDB Enterprise replset:PRIMARY> db.updtest.update({"name" : "nameOfNode"},{$pull:{"activities.0":ObjectId("5e7d354ccede22b56b5335b9")}})  
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise replset:PRIMARY> db.updtest.find()  
{ "_id" : ObjectId("5e7d354ccede22b56b5335bc"), "name" : "nameOfNode", "activities" : [ [ "Check-in" ], [ ObjectId("5e7d354ccede22b56b5335ba"), "Materi" ], [ ObjectId("5e7d354ccede22b56b5335bb"), "Materi" ] ] }

これによりObjectId値は正常に削除されますが、含まれている配列は削除されないことに注意してください。これは、私が望んでいたことです。

MongoDB 4.2を使用している場合は$filter、次のようにサブ要素全体を削除するために使用できます

db.updtest.update(
      {"name" : "nameOfNode"},
      [ {$set:{
         activities:{
             $filter:{
                 input:"$activities",
                 cond:{$ne:["$this.0",ObjectId("5e7d16e9736bb64bdd158c13")]}
             }
          }
      }}]
)

スキーマを変更できる場合は、アクティビティをサブ配列ではなくオブジェクトとして挿入します。たとえば、各アクティビティの形式{id:... type: ...}がの場合、$ pullを使用して特定のIDを照合できます。

MongoDB Enterprise replset:PRIMARY> db.updtest.find()
{ "_id" : ObjectId("5e7d3939cede22b56b5335c4"), "name" : "nameOfNode", "activities" : [ { "id" : ObjectId("5e7d3939cede22b56b5335c1"), "type" : "Check-in" }, { "id" : ObjectId("5e7d3939cede22b56b5335c2"), "type" : "Materi" }, { "id" : ObjectId("5e7d3939cede22b56b5335c3"), "type" : "Materi" } ] }

MongoDB Enterprise replset:PRIMARY> db.updtest.update({"name" : "nameOfNode"},{$pull:{"activities":{id:ObjectId("5e7d3939cede22b56b5335c2")}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise replset:PRIMARY> db.updtest.find()
{ "_id" : ObjectId("5e7d3939cede22b56b5335c4"), "name" : "nameOfNode", "activities" : [ { "id" : ObjectId("5e7d3939cede22b56b5335c1"), "type" : "Check-in" }, { "id" : ObjectId("5e7d3939cede22b56b5335c3"), "type" : "Materi" } ] }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MongoDB Aggregation:各配列値を別のフィールドから配列内の各オブジェクトに追加します。異なるフィールドからの2つの配列をマージ/結合します

分類Dev

PostgresqlはJSONBフィールドのオブジェクトの配列からキーを取得します

分類Dev

MongoDB-配列内の複数のオブジェクトから同じフィールドでドキュメントをクエリします

分類Dev

phpはフィールド名の配列からオブジェクトデータを取得します

分類Dev

オブジェクトの配列から再帰的に1つのフィールドを選択します

分類Dev

JSONオブジェクトの配列のフィールドから値を抽出します

分類Dev

MongoDB-配列内の一致するすべてのオブジェクトからフィールドを取得しますか?

分類Dev

配列MongoDBからオブジェクトを削除します

分類Dev

mongodbコレクションの埋め込み配列オブジェクトから特定のフィールドのみを取得します

分類Dev

mongodb、ドキュメントフィールドに等しい配列フィールドのオブジェクトのフィールドを更新します

分類Dev

jsonオブジェクトからフィールド名を削除します

分類Dev

一意のフィールドをフィルタリングし、オブジェクトの配列から配列にプッシュします

分類Dev

配列内のオブジェクトを新しいフィールドmongodbで更新します

分類Dev

Meteor(mongoDB)のオブジェクト配列のフィールドを更新します

分類Dev

MongoDB-配列オブジェクトのフィールドを比較します

分類Dev

オブジェクトのトラフ配列をマップしてから、フィルターを使用して重複を削除します

分類Dev

MongoDB $ lookupは、配列をオブジェクトに変換したりフィールドを削除したりせずに、_idの配列をオブジェクトの配列に置き換えます

分類Dev

すべての配列オブジェクトからフィールドを読み取ります

分類Dev

フィールドに基づいて配列からjavascriptオブジェクトを取得します

分類Dev

MongoDBは、オブジェクトからのキーを含むフィールドを追加します

分類Dev

ノード:配列から重複オブジェクトを削除します

分類Dev

数値以外のフィールド名を削除しながら、オブジェクトを配列に変換します

分類Dev

オブジェクトフィールドから順番にオブジェクト要素の配列にアクセスしますか?

分類Dev

内部に配列を持つオブジェクトのフィールドでオブジェクトの配列をフィルター処理します

分類Dev

オブジェクトを含む配列にいくつかのフィールドを追加します

分類Dev

typescriptインターフェイスオブジェクトからフィールドを削除します

分類Dev

オブジェクトフィールドに基づいてオブジェクトで構成される配列から平均値を取得します

分類Dev

MongoDBは、オブジェクトの配列内の配列からアイテムを削除します

分類Dev

vue.jsを使用してv-forからオブジェクトの配列内のいくつかのフィールドを計算します

Related 関連記事

  1. 1

    MongoDB Aggregation:各配列値を別のフィールドから配列内の各オブジェクトに追加します。異なるフィールドからの2つの配列をマージ/結合します

  2. 2

    PostgresqlはJSONBフィールドのオブジェクトの配列からキーを取得します

  3. 3

    MongoDB-配列内の複数のオブジェクトから同じフィールドでドキュメントをクエリします

  4. 4

    phpはフィールド名の配列からオブジェクトデータを取得します

  5. 5

    オブジェクトの配列から再帰的に1つのフィールドを選択します

  6. 6

    JSONオブジェクトの配列のフィールドから値を抽出します

  7. 7

    MongoDB-配列内の一致するすべてのオブジェクトからフィールドを取得しますか?

  8. 8

    配列MongoDBからオブジェクトを削除します

  9. 9

    mongodbコレクションの埋め込み配列オブジェクトから特定のフィールドのみを取得します

  10. 10

    mongodb、ドキュメントフィールドに等しい配列フィールドのオブジェクトのフィールドを更新します

  11. 11

    jsonオブジェクトからフィールド名を削除します

  12. 12

    一意のフィールドをフィルタリングし、オブジェクトの配列から配列にプッシュします

  13. 13

    配列内のオブジェクトを新しいフィールドmongodbで更新します

  14. 14

    Meteor(mongoDB)のオブジェクト配列のフィールドを更新します

  15. 15

    MongoDB-配列オブジェクトのフィールドを比較します

  16. 16

    オブジェクトのトラフ配列をマップしてから、フィルターを使用して重複を削除します

  17. 17

    MongoDB $ lookupは、配列をオブジェクトに変換したりフィールドを削除したりせずに、_idの配列をオブジェクトの配列に置き換えます

  18. 18

    すべての配列オブジェクトからフィールドを読み取ります

  19. 19

    フィールドに基づいて配列からjavascriptオブジェクトを取得します

  20. 20

    MongoDBは、オブジェクトからのキーを含むフィールドを追加します

  21. 21

    ノード:配列から重複オブジェクトを削除します

  22. 22

    数値以外のフィールド名を削除しながら、オブジェクトを配列に変換します

  23. 23

    オブジェクトフィールドから順番にオブジェクト要素の配列にアクセスしますか?

  24. 24

    内部に配列を持つオブジェクトのフィールドでオブジェクトの配列をフィルター処理します

  25. 25

    オブジェクトを含む配列にいくつかのフィールドを追加します

  26. 26

    typescriptインターフェイスオブジェクトからフィールドを削除します

  27. 27

    オブジェクトフィールドに基づいてオブジェクトで構成される配列から平均値を取得します

  28. 28

    MongoDBは、オブジェクトの配列内の配列からアイテムを削除します

  29. 29

    vue.jsを使用してv-forからオブジェクトの配列内のいくつかのフィールドを計算します

ホットタグ

アーカイブ