Durchlaufen Sie alle Mongo-Sammlungen und führen Sie die Abfrage aus

Erstens bin ich ziemlich neu in Mongodb. Hier ist meine Frage, für die ich keine Lösung gefunden habe.

Angenommen, ich habe 3 verschiedene Sammlungen.

mongos> show collections
collectionA
collectionB
collectionC

Ich möchte ein Skript erstellen, das alle Sammlungen in dieser Datenbank durchläuft und den zuletzt eingefügten Zeitstempel in jeder dieser Sammlungen findet. Hier ist, was in Mongos funktioniert.

var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")

1. Problem (über alle Sammlungen iterieren)

Gibt es eine Möglichkeit zu etw. mögen.

var my_collections = show collections;
my_collections.forEach(function(current_collection){
    print(current_collection);
});

Problem hierbei ist die Zuordnung zumy_collections funktioniert nicht. Ich bekommeSyntaxError: Unexpected identifier. Muss ich die 'show'-Aussage zitieren? Ist es überhaupt möglich ?

2. Problem (Speicherung der Sammlung in js var)

Ich kann Problem 1 umgehen, indem ich dies tue:

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());
});

Daslast_element.next() erzeugt den folgenden Fehler:

error hasNext: false in der Datei src / mongo / shell / query.js: 124

Es scheint, dass last_element nicht korrekt gespeichert wurde.

Irgendwelche Vorschläge, was ich falsch mache?

AKTUALISIEREN

Neils Antwort führte mich zu dieser Lösung. Zusätzlich zu seinem Code musste ich prüfen, ob die Funktion funktioniertgetTimestamp wirklich existieren. Für einige "virtuelle" Sammlungen scheint es keine _id-Eigenschaft zu geben.

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)")
        }
    }
});

Antworten auf die Frage(1)

Ihre Antwort auf die Frage