Respostas:
Tente o seguinte: se sua coleção era 'exemplo'
db.example.update({}, {$unset: {words:1}}, false, true);
Consulte isto:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
ATUALIZAÇÃO :
O link acima não cobre mais '$ unset'ing. Certifique-se de adicionar {multi: true}
se você deseja remover este campo de todos os documentos da coleção; caso contrário, ele será removido apenas do primeiro documento que corresponder. Consulte isso para obter a documentação atualizada:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Exemplo:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
deveria estar $unset
, não words
? Veja também a resposta de Salvador Dali.
updateMany
vez de {multi:true}
, ou seja, db.example.updateMany({},{"$unset":{words:""}})
No começo, não entendi por que a pergunta tem uma recompensa (achei que a pergunta tinha uma boa resposta e não havia mais nada a acrescentar), mas então notei que a resposta que foi aceita e votada 15 vezes estava realmente errada!
Sim, você precisa usar o $unset
operador , mas esse desmarcado removerá a chave de palavras que não existe para um documento para uma coleção. Então, basicamente, não fará nada.
Então, você precisa dizer ao Mongo para procurar nas tags do documento e nas palavras usando a notação de ponto . Portanto, a consulta correta é.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Apenas para fins de conclusão, vou me referir a outra maneira de fazer isso , que é muito pior, mas dessa maneira você pode alterar o campo com qualquer código personalizado (mesmo com base em outro campo deste documento).
Para remover ou excluir o campo no MongoDB
Para registro único
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Para Multi Record
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
Eu estava tentando fazer algo semelhante a isso, mas em vez disso, remova a coluna de um documento incorporado. Demorei um pouco para encontrar uma solução e este foi o primeiro post que me deparei, então pensei em publicá-lo aqui para qualquer pessoa que tente fazer o mesmo.
Então, digamos que seus dados sejam assim:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Para remover a coluna words
do documento incorporado, faça o seguinte:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
ou usando o updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
O $unset
editará apenas se o valor existir, mas não fará uma navegação segura (ele não verificará se tags
existe primeiro), portanto, a existência é necessária no documento incorporado.
Isso usa o operador all position ( $[]
), que foi introduzido na versão 3.6
Por padrão, o método update () atualiza um único documento. Defina o multiparâmetro para atualizar todos os documentos que correspondem aos critérios de consulta.
Alterado na versão 3.6. Sintaxe:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Exemplo:
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
No seu exemplo:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
Iniciando Mongo 4.2
, também é possível usar uma sintaxe ligeiramente diferente:
// { 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 } }
O método de atualização também pode aceitar um pipeline de agregação (observe os colchetes que significam o uso de um pipeline de agregação).
Isso significa que o $unset
operador que está sendo usado é o agregado (em oposição ao da "consulta" ), cuja sintaxe utiliza uma matriz de campos.
A solução para PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
Como eu continuei encontrando esta página ao procurar uma maneira de remover um campo usando o MongoEngine, acho que pode ser útil postar o caminho do MongoEngine aqui também:
Example.objects.all().update(unset__tags__words=1)
{name: 'book', tags: {words: ['abc', '123'], lat: 33, long: 22}}
Resp:
db.tablename.remove ({'tags.words': ['abc', '123']})
Verificando se existem "palavras" e removendo do documento
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true indica atualizar vários documentos, se corresponder.