2011-07-27 13 views
171
{ 
    name: 'book', 
    tags: { 
     words: ['abc','123'], 
     lat: 33, 
     long: 22 
    } 
} 

Załóżmy, że jest to dokument. Jak usunąć "words" ze wszystkich dokumentów z tej kolekcji? Chcę, aby wszystkie dokumenty się bez "words":Jak usunąć pole całkowicie z dokumentu MongoDB?

{ 
    name: 'book', 
    tags: { 
     lat: 33, 
     long: 22 
    } 
} 

Odpowiedz

300

Spróbuj tego: Jeśli zbiór jest 'przykładem'

db.example.update({}, {$unset: {words:1}}, false, true); 

sprawdź to:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset

UPDATE :

Powyższy link nie obejmuje już "$ unset'ing". Komentarz Nic Cottrell poniżej jest teraz do zrobienia. Pamiętaj, aby dodać {multi: true}, jeśli chcesz usunąć to pole ze wszystkich dokumentów w kolekcji; w przeciwnym razie usunie go tylko z pierwszego znalezionego dokumentu. Zobacz to na zaktualizowanej dokumentacji:

https://docs.mongodb.com/manual/reference/operator/update/unset/

Przykład:

db.example.update({}, {$unset: {words:1}} , {multi: true}); 
+0

Czy wiesz, dlaczego fałszywe, prawdziwe dzieła? –

+61

Nowsze wersje obsługują bardziej czytelny format: 'db.example.update ({}, {$ unset: {words: 1}}, {multi: true})' –

+2

db.example.update ({}, {$ unset : {field: 1, multi: true}}) Zapytanie Nicka nie działało dla mnie. –

103

Na początku nie miałem, dlaczego pytanie ma bounty (myślałem, że pytanie ma ładny odpowiedź i nie ma nic dodać), ale potem zauważyłem, że odpowiedź, która została przyjęta i wznowiona 15 razy, była w rzeczywistości błędna!

Tak, musisz użyć $unset operator, ale to ustawienie spowoduje usunięcie słowa klucz, który nie istnieje dla dokumentu dla kolekcji. Więc w zasadzie nic nie zrobi.

Musisz więc powiedzieć mongo, aby zajrzał do tagów dokumentu, a następnie do słów: dot notation. Tak więc prawidłowe zapytanie jest.

db.example.update(
    {}, 
    { $unset: {'tags.words':1}}, 
    false, true 
) 

Właśnie przez wzgląd na ukończeniu będę odnosić się do another way of doing it, która jest znacznie gorzej, ale w ten sposób można zmienić pole z dowolnego kodu niestandardowego (nawet na podstawie innego pola z tego dokumentu).

0

Sprawdzanie, czy słowa „istnieje”, a następnie usunięcie z dokumentu

db.users.update({"tags.words" :{$exists: true}}, 
              {$unset:{"tags.words":1}},false,true); 

true wskazuje aktualizacji wielu dokumentów czy dopasowane.

-6

Aby odwołać pakiet i usunąć różne "klucze", spróbować tej

db['name1.name2.name3.Properties'].remove([ 
{ 
    "key" : "name_key1" 
}, 
{ 
    "key" : "name_key2" 
}, 
{ 
    "key" : "name_key3" 
} 
)] 
10

Aby usunąć lub usunąć pole w MongoDB

  • Dla pojedynczego rekordu

    db.getCollection('userData').update({}, {$unset: {pi: 1}}) 
    
  • Dla wielu rekordów

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true}) 
    
-2

można też zrobić to w agregacji za pomocą projektu na 3,4

{$ projektu: { "tags.words": 0}}

0
db.example.updateMany({},{"$unset":{"tags.words":1}}) 

Możemy również użyj tego do aktualizacji wielu dokumentów.

Powiązane problemy