Estoy tratando de eliminar todos los proyectos huérfanos. En db necesito obtener los proyectos donde se eliminan todos sus usuarios. Ya lo intenté con la consulta a continuación, pero siempre da los resultados donde el campo de eliminación está ausente.
db.projects.find({ "user_list": { $not: { $elemMatch: { "deleted": false } } }, "user_list.deleted": {$exists: true} }, {"user_list": 1})Necesita ayuda para escribir una consulta para obtener los únicos proyectos con todos los usuarios eliminados. Por ejemplo, en el siguiente ejemplo, solo debería obtener el segundo documento.
Lista de proyectos
/* 1 */ { "_id" : ObjectId("636a6aa584d5f92f14f0c548"), "user_list" : [ { "deleted" : false, "user_id" : "602cf72a3fcad3cc605b8d59" }, { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d50" } ] } /* 2 */ { "_id" : ObjectId("602e443bacdd4184511d6e29"), "user_list" : [ { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d59" }, { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d59" }, { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d59" } ] } /* 3 */ { "_id" : ObjectId("60332242acdd4184511ed664"), "user_list" : [ { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d59", }, { "deleted" : true, "user_id" : "602cf72a3fcad3cc605b8d59" }, { "user_id" : "602cf72a3fcad3cc605b8d59" } ] }db.projects.find( { "user_list.deleted": { $ne: false } } )debería darle todos los proyectos que no tienen registro de borrado === falso.
puede $and hacerlo con $ne: null for null set to deleted para evitarlos también.
Actualizaciones: desde https://docs.mongodb.com/manual/reference/operator/query/and/index.html Podría imaginarme seguir para trabajar, pero no es válido cuando lo ejecuto en mi máquina local. Esto podría deberse a la anidación.
{ user_list.deleted: { $ne: false, $exists: true } }Pero este funciona,
{ user_list.deleted: { $ne: false, $ne: null } }db.projects.find({ $and: [ { "user_list" : { $in : ["deleted"] } }, { "user_list" : { $elemMatch : { "deleted" : true} } }, { "user_list" : { $elemMatch : { "deleted" :{$ne:false}} } } ]});Prueba con esta consulta. Creo que debería funcionar en todos los casos mencionados.