5

実際には、その位置に基づいて配列から要素を削除する必要があります。$ popを使用すると、ここで説明するように、要素を上または下から削除できます(スタックと見なされます。上部の0番目の要素)。

ここで説明するように、$ pullを使用して、配列内の要素の値に基づいて配列から要素を削除することもできます。

しかし、位置に基づいて配列から要素を削除する必要があります。だから私がこれを行うことができる方法はありますか?

4

3 に答える 3

11

ドキュメントから:

{ $pull : { field : {$gt: 3} } } removes array elements greater than 3

だから私はあなたが今のところこのような何かをすることができると思います:

{ $pull : { field : {$gt: 3, $lt: 5} } } // shoud remove elemet in 4 position 

または、位置演算子を使用して更新してみてください。次のようになります。

  { $pull : "field.4" } 

  { $pull : {"field.$": 4}}

私は今それをテストすることができないので、それは単なる提案です。

アップデート:

ワンステップで正しく理解できないようです(jiraにはそのようなバグがあります

ただし、未設定の要素を所定の位置に使用して削除することができ、null値の要素をプルします。

{$unset : {"array.4" : 1 }}
{$pull : {"array" : null}}
于 2011-02-11T14:19:54.200 に答える
1

これは、最新のmongodb v4.2でそれを行うことができる方法であり、醜いですが機能しています

     _id: ObjectId("5e4539cb6aebbeaa0a6b8fe7") 
   }, [
        { $set: 
          { notes: 
            { 
              $concatArrays: [
                { $slice: ['$notes', 4] }, 
                { $slice: ['$notes', { $add: [1, 4] }, { $size: '$notes' }]}
              ] 
            } 
          } 
        }
      ])```
于 2020-02-13T13:46:46.633 に答える
0

これがあなたの答えです:MongoDBはコレクションから配列要素をプルします

ドキュメントの配列から特定の要素を削除するには、最初にこの要素を識別する必要があります。たとえば、配列を含むドキュメントがあり、この配列のすべての要素がオブジェクトです。

{
    "_id" : ObjectId("5140f34888dd50971900002d"),
    "_permissions" : {
        "edit" : [
            {
                "profile_id" : NumberLong(123),
                "comment" : "app/project owner"
            },
            {
                "profile_id" : NumberLong("153579099841888257"),
                "comment" : "project admin"
            },
            {
                "profile_id" : NumberLong("153579095869882369"),
                "comment" : "project admin"
            }
        ],
        "view" : [
            {
                "profile_id" : NumberLong(123),
                "comment" : "app/project owner"
            },
            {
                "profile_id" : NumberLong("153579099841888257"),
                "comment" : "project admin"
            },
            {
                "profile_id" : NumberLong("153579095869882369"),
                "comment" : "project admin"
            }
        ]
    }
}

profile_idそれでは、配列から「153579099841888257」の値で削除しましょう_permissions.view。どうぞ

db.collection.update({_id: ObjectId("5140f34888dd50971900002d")}, {$pull:{"_permissions.view": {"profile_id": NumberLong("153579099841888257")}}});
  1. オブジェクトのスコープを定義します(idが他の最初に見つかったドキュメントに影響を与えないようにするため)
  2. 引き出すために必要な要素を特定します:配列profile_idの「153579099841888257」値を使用_permissions.view
于 2013-03-14T01:22:33.670 に答える