Odpowiedzi:
Spróbuj tego: jeśli Twoja kolekcja to „przykład”
db.example.update({}, {$unset: {words:1}}, false, true);
Zobacz to:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
AKTUALIZACJA :
Powyższy link nie obejmuje już „rozbrojenia”. 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, który pasuje. Zobacz zaktualizowaną dokumentację:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Przykład:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
powinno być $unset
, nie words
? Zobacz także odpowiedź Salvadora Dali.
updateMany
zamiast {multi:true}
, tj.db.example.updateMany({},{"$unset":{words:""}})
Na początku nie rozumiałem, dlaczego pytanie ma nagrodę (myślałem, że pytanie ma fajną odpowiedź i nie ma nic do dodania), ale potem zauważyłem, że odpowiedź, która została zaakceptowana i oceniona 15 razy, była w rzeczywistości błędna!
Tak, musisz użyć $unset
operatora , ale to ustawienie usunie klucz słów, który nie istnieje dla dokumentu dla kolekcji. Zasadniczo nic to nie da.
Musisz więc powiedzieć Mongo, aby poszukała znaczników dokumentu, a następnie słów, używając notacji kropkowej . Prawidłowe zapytanie to.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Dla uzupełnienia powiem o innym sposobie zrobienia tego , co jest znacznie gorsze, ale w ten sposób możesz zmienić pole dowolnym kodem niestandardowym (nawet w oparciu o inne pole z tego dokumentu).
Aby usunąć lub usunąć pole w MongoDB
Dla pojedynczego rekordu
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Do Multi Record
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
Próbowałem zrobić coś podobnego do tego, ale zamiast tego usunąłem kolumnę z osadzonego dokumentu. Znalezienie rozwiązania zajęło mi trochę czasu i był to pierwszy post, na który natknąłem się, więc pomyślałem, że opublikuję to tutaj dla każdego, kto spróbuje zrobić to samo.
Powiedzmy, że zamiast tego twoje dane wyglądają tak:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Aby usunąć kolumnę words
z osadzonego dokumentu, wykonaj następujące czynności:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
lub używając updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
$unset
Tylko edytować go, czy wartość istnieje, ale nie zrobi bezpieczną nawigację (przyzwyczajenie to sprawdzić, czy tags
istnieje pierwszy), więc istnieje potrzeba na dokumencie osadzonego.
Używa to operatora pozycyjnego ( $[]
), który został wprowadzony w wersji 3.6
Domyślnie metoda update () aktualizuje pojedynczy dokument. Ustaw Multi Parameter, aby zaktualizować wszystkie dokumenty spełniające kryteria zapytania.
Zmieniono w wersji 3.6. Składnia:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Przykład:
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
W twoim przykładzie:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
Zaczynając Mongo 4.2
, można również użyć nieco innej składni:
// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.update({}, [{ $unset: ["tags.words"] }], { many: true })
// { name: "book", tags: { lat: 33, long: 22 } }
Metoda aktualizacji może również akceptować potok agregacji (zwróć uwagę na kwadratowe nawiasy oznaczające użycie potoku agregacji).
Oznacza to $unset
, że używany jest operator agregujący (w przeciwieństwie do operatora „kwerendowego” ), którego składnia zajmuje tablicę pól.
Rozwiązanie dla PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
Ponieważ ciągle szukałem tej strony, szukając sposobu na usunięcie pola za pomocą MongoEngine, wydaje mi się, że może być pomocne opublikowanie tutaj również MongoEngine:
Example.objects.all().update(unset__tags__words=1)
{name: 'book', tags: {words: ['abc', '123'], lat: 33, long: 22}}
Odp .:
db.tablename.remove ({'tags.words': ['abc', '123']})
Sprawdzanie, czy istnieją „słowa”, a następnie usuwanie z dokumentu
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true oznacza aktualizację wielu dokumentów, jeśli są dopasowane.