Respuestas:
Pruebe esto: si su 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 '$ unset'ing. 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. Consulte esto para obtener documentación actualizada:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Ejemplo:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
debería estarlo $unset
, no words
? Ver también la respuesta de Salvador Dalí.
updateMany
lugar de {multi:true}
, es decirdb.example.updateMany({},{"$unset":{words:""}})
Al principio, no entendí por qué la pregunta tiene recompensas (pensé que la pregunta tiene una buena respuesta y no hay nada que agregar), pero luego me di cuenta de que la respuesta que fue aceptada y votada 15 veces era realmente incorrecta.
Sí, debe usar el $unset
operador , pero este desarmado eliminará la clave de palabras que no existe para un documento para una colección. Entonces, básicamente, no hará nada.
Por lo tanto, debe decirle a Mongo que busque en las etiquetas del documento y luego en las palabras con notación de puntos . Entonces 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).
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})
Intenté hacer algo similar a esto, pero eliminé la columna de un documento incrustado. Me tomó un tiempo encontrar una solución y esta fue la primera publicación que encontré, así que pensé en publicar esto aquí para cualquier otra persona que intente hacer lo mismo.
Entonces, digamos que sus datos se ven así:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Para eliminar la columna words
del documento incrustado, haga esto:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
o usando el updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
El $unset
sólo se editarla si existe el valor pero no va a hacer una navegación segura (no lo puedo comprobar si tags
existe primero) por lo que el que existe es necesaria en el documento incrustado.
Esto utiliza el operador posicional completo ( $[]
) que se introdujo en la versión 3.6
Por defecto, 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.
Cambiado 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})
Comenzando Mongo 4.2
, también es posible usar una sintaxis ligeramente 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 } }
El método de actualización también puede aceptar una tubería de agregación (tenga en cuenta los corchetes que significan el uso de una tubería de agregación).
Esto significa que el $unset
operador que se está utilizando es el de agregación (en oposición al de "consulta" ), cuya sintaxis toma una matriz de campos.
La solución para PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
Debido a que seguí buscando esta página cuando buscaba una forma de eliminar un campo usando MongoEngine, creo que podría ser útil publicar la forma de MongoEngine aquí también:
Example.objects.all().update(unset__tags__words=1)
{nombre: 'libro', etiquetas: {palabras: ['abc', '123'], lat: 33, largo: 22}}
Respuesta:
db.tablename.remove ({'tags.words': ['abc', '123']})
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.