Risposte:
Prova questo: se la tua collezione era "esempio"
db.example.update({}, {$unset: {words:1}}, false, true);
Segnala questo:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
AGGIORNAMENTO :
Il link sopra non copre più '$ unset'. Assicurati di aggiungere {multi: true}
se desideri rimuovere questo campo da tutti i documenti della raccolta; in caso contrario, lo rimuoverà solo dal primo documento trovato corrispondente. Vedi questo per la documentazione aggiornata:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Esempio:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
dovrebbe essere $unset
, no words
? Vedi anche la risposta di Salvador Dalì.
updateMany
invece di {multi:true}
, cioèdb.example.updateMany({},{"$unset":{words:""}})
All'inizio non capivo perché la domanda avesse una taglia (pensavo che la domanda avesse una bella risposta e non ci fosse nulla da aggiungere), ma poi ho notato che la risposta che è stata accettata e votata 15 volte era in realtà sbagliata!
Sì, devi usare l' $unset
operatore , ma questo disinserimento rimuoverà la chiave delle parole che non esiste per un documento per una raccolta. Quindi sostanzialmente non farà nulla.
Quindi devi dire a Mongo di cercare nei tag del documento e poi nelle parole usando la notazione a punti . Quindi la query corretta è.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Solo per motivi di completamento, farò riferimento a un altro modo di farlo , che è molto peggio, ma in questo modo puoi cambiare il campo con qualsiasi codice personalizzato (anche basato su un altro campo di questo documento).
Per rimuovere o eliminare il campo in MongoDB
Per singolo record
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Per Multi Record
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
Stavo cercando di fare qualcosa di simile a questo, ma invece ho rimosso la colonna da un documento incorporato. Mi ci è voluto un po 'per trovare una soluzione e questo è stato il primo post in cui mi sono imbattuto, quindi ho pensato di pubblicarlo qui per chiunque cercasse di fare lo stesso.
Quindi diciamo invece che i tuoi dati siano così:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Per rimuovere la colonna words
dal documento incorporato, procedere come segue:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
o usando il updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
Il $unset
modificherà solo se il valore esiste ma non eseguirà una navigazione sicura (non verificherà setags
esiste prima) quindi è necessario che esista sul documento incorporato.
Questo utilizza l' operatore all posizionale ( $[]
) che è stato introdotto nella versione 3.6
Per impostazione predefinita, il metodo update () aggiorna un singolo documento. Impostare il multiparametro per aggiornare tutti i documenti che soddisfano i criteri di query.
Modificato nella versione 3.6. Sintassi:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Esempio :
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
Nel tuo esempio:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
A partire Mongo 4.2
, è anche possibile utilizzare una sintassi leggermente diversa:
// { 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 } }
L' aggiornamento metodo di può anche accettare una pipeline di aggregazione (notare le parentesi quadre che indicano l'uso di una pipeline di aggregazione).
Ciò significa che l' $unset
operatore utilizzato è quello di aggregazione (al contrario di quello "query" ), la cui sintassi accetta una matrice di campi.
La soluzione per PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
Poiché ho continuato a trovare questa pagina quando cercavo un modo per rimuovere un campo usando MongoEngine, suppongo che potrebbe essere utile pubblicare anche qui MongoEngine:
Example.objects.all().update(unset__tags__words=1)
{name: 'book', tag: {words: ['abc', '123'], lat: 33, long: 22}}
Ans:
db.tablename.remove ({ 'tags.words': [ 'abc', '123']})
Verifica dell'esistenza di "parole", quindi rimozione dal documento
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true indica l'aggiornamento di più documenti se abbinati.