{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
Suponha que este seja um documento. Como removo words
completamente " " todos os documentos desta coleção? Quero que todos os documentos fiquem sem " words
":
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
mongodb
mongodb-query
database
TIMEX
fonte
fonte
tags.words
deveria estar$unset
, nãowords
? 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 é.
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).
fonte
Também podemos usar isso para atualizar vários documentos.
fonte
false, true
como dois últimos argumentos paraupdate()
Para remover ou excluir o campo no MongoDB
Para registro único
Para Multi Record
fonte
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:
Para remover a coluna
words
do documento incorporado, faça o seguinte:ou usando o
updateMany
O
$unset
editará apenas se o valor existir, mas não fará uma navegação segura (ele não verificará setags
existe primeiro), portanto, a existência é necessária no documento incorporado.Isso usa o operador all position (
$[]
), que foi introduzido na versão 3.6fonte
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:
Exemplo:
No seu exemplo:
fonte
Iniciando
Mongo 4.2
, também é possível usar uma sintaxe ligeiramente diferente: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.fonte
A solução para PyMongo (Python mongo):
fonte
E para mongomapper,
Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )
fonte
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:
fonte
{name: 'book', tags: {words: ['abc', '123'], lat: 33, long: 22}}
Resp:
db.tablename.remove ({'tags.words': ['abc', '123']})
fonte
Verificando se existem "palavras" e removendo do documento
true indica atualizar vários documentos, se corresponder.
fonte
você também pode fazer isso em agregação usando o projeto em 3.4
{$ project: {"tags.words": 0}}
fonte
Para fazer referência a um pacote e remover várias "chaves", tente este
fonte