He consultado una API que es bastante inconsistente y, por lo tanto, no devuelve objetos para todos los índices numéricos (pero la mayoría de ellos). Para continuar con .count() en el índice numérico, he estado insertando documentos vacíos con db.collection.insert({})
Mi pregunta ahora es: ¿cómo encontraría y contaría estos objetos? Algo como db.collection.count({}) obviamente no funcionará.
¡Gracias por cualquier idea!
Utilice el operador $where. La expresión de Javascript devuelve solo documentos que contienen una sola clave. (esa clave única es la clave "_id" de los documentos)
db.collection.find({ "$where": "return Object.keys(this).length == 1" }).count()Para MongoDB 3.4.4 y posteriores, considere ejecutar la siguiente canalización agregada que usa $objectToArray (que está disponible en MongoDB 3.4.4 y versiones más recientes) para obtener el recuento de esos documentos vacíos/campos nulos:
db.collection.aggregate([ { "$project": { "hashmaps": { "$objectToArray": "$$ROOT" } } }, { "$project": { "keys": "$hashmaps.k" } }, { "$group": { "_id": null, "count": { "$sum": { "$cond": [ { "$eq":[ { "$ifNull": [ { "$arrayElemAt": ["$keys", 1] }, 0 ] }, 0 ] }, 1, 0 ] } } } } ]);