2011-09-29 20 views
7

Me pregunto si esto es posible hacerlo en una sola solicitud?Mongodb coincide el objeto vacío en el documento anidado

Dada

{ 
    _id: 1, 
    foo: { 
    fred: {},   // <- I want to remove empty keys like this 
    barney: { bar: 1 } // <- But keep these keys 
    } 
} 

preverse

{ 
    _id: 1, 
    foo: { 
    barney: { bar: 1 } 
    } 
} 

Yo sé cómo hacerlo en varias solicitudes, pero estoy tratando de entender mejor MongoDB.


Nota.fred queda vacío en el comando de actualización como { $unset: { "fred.baz": 1 } } cuando baz es la última clave en fred.

¿Quizás es posible eliminarlo con su contenido? Pero el remitente del comando no sabe, ¿hay otras claves, excepto baz en este momento.

Respuesta

8

Puede buscar documentos vacíos incorporados ({ }) y $unset ellos .. He aquí un ejemplo en la cáscara JS:

db.mycoll.update(
    {'foo.fred':{ }}, 
    { $unset: {'foo.fred':1} }, 
    false, // upsert: no 
    true // multi: find all matches 
) 
Cuestiones relacionadas