documentos - ¿Cómo eliminar un campo completamente de un documento MongoDB?
borrar base de datos mongodb (9)
Al principio, no entendí por qué la pregunta tiene una recompensa (pensé que la pregunta tiene una buena respuesta y no hay nada que agregar), pero luego noté que la respuesta que fue aceptada y actualizada 15 veces fue realmente incorrecta.
Sí, tiene que usar el operador $unset
, pero este no se eliminará la clave de palabras que no existe para un documento para una colección. Así que básicamente no hará nada.
Por lo tanto, debe decirle a Mongo que busque en las etiquetas del documento y luego en las palabras usando la notación de puntos . Así que la consulta correcta es.
db.example.update(
{},
{ $unset: {''tags.words'':1}},
false, true
)
Solo por completar, me referiré a otra forma de hacerlo , que es mucho peor, pero de esta manera puede cambiar el campo con cualquier código personalizado (incluso basado en otro campo de este documento).
{
name: ''book'',
tags: {
words: [''abc'',''123''],
lat: 33,
long: 22
}
}
Supongamos que esto es un documento. ¿Cómo elimino " words
" completamente de todos los documentos en esta colección? Quiero que todos los documentos estén sin " words
":
{
name: ''book'',
tags: {
lat: 33,
long: 22
}
}
Comprobando si existen "palabras" y luego eliminando del documento
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
verdadero indica actualizar varios documentos si coinciden.
De forma predeterminada, el método update () actualiza un solo documento. Configure el parámetro múltiple para actualizar todos los documentos que coincidan con los criterios de consulta.
Modificado en la versión 3.6. Sintaxis:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Ejemplo:
db.getCollection(''products'').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
En tu ejemplo:
db.getCollection(''products'').update({},{$unset: {''tags.words'' :1}}, {multi: true})
Para hacer referencia a un paquete y eliminar varias "claves", intente esto
db[''name1.name2.name3.Properties''].remove([
{
"key" : "name_key1"
},
{
"key" : "name_key2"
},
{
"key" : "name_key3"
}
)]
Prueba esto: si tu colección fue ''ejemplo''
db.example.update({}, {$unset: {words:1}}, false, true);
Consulte esto:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
ACTUALIZACIÓN :
El enlace anterior ya no cubre ''$ desarmado''. El comentario de Nic Cottrell a continuación es el camino a seguir ahora. Asegúrese de agregar {multi: true}
si desea eliminar este campo de todos los documentos de la colección; de lo contrario, solo lo eliminará del primer documento que encuentre que coincida. Vea esto para la documentación actualizada:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Ejemplo:
db.example.update({}, {$unset: {words:1}} , {multi: true});
También puede hacer esto de forma agregada utilizando el proyecto en 3.4.
{$ proyecto: {"tags.words": 0}}
{nombre: ''libro'', etiquetas: {palabras: [''abc'', ''123''], lat: 33, largo: 22}}
Respuesta:
db.tablename.remove ({''tags.words'': [''abc'', ''123'']})
Para eliminar o eliminar el campo en MongoDB
Para un solo registro
db.getCollection(''userData'').update({}, {$unset: {pi: 1}})
Para registro múltiple
db.getCollection(''userData'').update({}, {$unset: {pi: 1}}, {multi: true})
db.example.updateMany({},{"$unset":{"tags.words":1}})
También podemos usar esto para actualizar varios documentos.