Recorra todas las colecciones de Mongo y ejecute la consulta
Primero, soy bastante nuevo en mongodb. Aquí está mi pregunta para la que no he podido encontrar una solución.
Digamos que tengo 3 colecciones diferentes.
mongos> show collections
collectionA
collectionB
collectionC
Quiero crear un script que repita todas las colecciones en esta base de datos y encuentre la última marca de tiempo insertada en cada una de estas colecciones. Esto es lo que funciona dentro de los mongos.
var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")
1. Problema (iterar sobre todas las colecciones)
¿Hay alguna posibilidad de algo? me gusta.
var my_collections = show collections;
my_collections.forEach(function(current_collection){
print(current_collection);
});
Problema aquí, la tarea paramy_collections
No funciona. yo obtengoSyntaxError: Unexpected identifier
. ¿Necesito citar la declaración 'show'? ¿Es posible?
2. Problema (almacenando colección en js var)
Puedo solucionar el problema 1 haciendo esto:
var my_collections = ["collectionA", "collectionB", "collectionC"];
my_collections.forEach(function(current_collection){
var last_element = db.current_collection.find().sort({_id:-1}).limit(1);
print(current_collection);
printjson(last_element.next()._id.getTimestamp());
});
loslast_element.next()
produce el siguiente error:
error hasNext: false en src / mongo / shell / query.js: 124
Parece que last_element no se guarda correctamente.
¿Alguna sugerencia sobre lo que estoy haciendo mal?
ACTUALIZAR
La respuesta de Neils me llevó a esta solución. Además de su código, tuve que verificar si la funcióngetTimestamp
Realmente existe. Para algunas colecciones 'virtuales' parece que no hay propiedad _id.
db.getCollectionNames().forEach(function(collname) {
var last_element = db[collname].find().sort({_id:-1}).limit(1);
if(last_element.hasNext()){
var next = last_element.next();
if(next._id !== undefined && typeof next._id.getTimestamp == 'function'){
printjson(collname + " >> "+next._id.getTimestamp());
}else{
print(collname + " undefined!! (getTimestamp N/A)")
}
}
});