MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $pullAll

В MongoDB можете да използвате $pullAll оператор за премахване на всички екземпляри на посочените стойности от съществуващ масив.

Използвайте $pullAll във връзка с метод като update() , updateOne() или updateMany() за да актуализирате посочения/ите документ/и с промяната.

Пример

Да предположим, че имаме колекция със следните документи:

{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

И да кажем, че искаме да премахнем всички стойности на 7 от масива в документ 1.

Можем да направим това:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Това съобщение ни казва, че един документ съответства и един (т.е. същият документ) е променен.

Нека да разгледаме колекцията сега:

db.foo.find()

Резултат:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Можем да видим, че масивът в документ 1 е имал всичките си 7 стойностите са премахнати, както е посочено.

Премахване на множество стойности

Аргументът, който предоставихме на $pullAll е масив и затова можем да премахнем множество стойности, като ги разделим със запетая.

Пример:

db.foo.update( 
  { _id: 2 }, 
  { $pullAll: { bar: [ 17, 18 ] } } 
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Сега нека проверим колекцията отново:

db.foo.find()

Резултат:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Можем да видим, че стойностите 17 и 18 са премахнати от масива в документ 2.

Актуализиране на всички документи

Можете да добавите multi: true или използвайте updateMany() метод за актуализиране на всички документи, които отговарят на критериите.

Когато направите това, премахнете всички критерии за избор от първия документ за заявка (който указва кой/ите документ/и да актуализирате). С други думи, използвайте празен документ като първи аргумент за update() (или updateMany() ) метод.

Пример:

db.foo.update( 
  { }, 
  { $pullAll: { bar: [ 1, 8 ] } },
  { multi: true }
)

Изход:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

В този случай можем да видим, че три документа съвпадат (тъй като в колекцията има три документа) и трите са променени (тъй като всички съдържат посочените стойности).

Нека проверим колекцията отново:

db.foo.find()

Резултат:

{ "_id" : 1, "bar" : [ 2, 3 ] }
{ "_id" : 2, "bar" : [ 0 ] }
{ "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }

Можем да видим, че всички екземпляри са актуализирани, както е посочено.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $split

  2. Как да защитите ClusterControl сървъра

  3. 6 начина да получите годината от дата в MongoDB

  4. Как да съхранявате полето за дата като ISODate() с помощта на jackson в MongoDb

  5. Разлика между съхраняването на ObjectId и неговата низова форма в MongoDB