2017-03-07 1 views
1

Ich habe eine Mongodb-Datenbank mit über 100 Sammlungen. Ich versuche ein Objekt mit einer bekannten ObjectID zu finden, das zu einer (unbekannten) Sammlung dieser Datenbank gehört.MongoDB: Finde ein Objekt anhand seiner ID, ohne die Sammlung zu kennen

Ich habe versucht zu tun:

db.getCollectionNames().forEach(function(collname) { 
    var object = db[collname].find({'_id' : ObjectId("54d0232ef83ea4000d2c0610")}); 
    if(object._id !== undefined){ 
     printjson("Found in " >> collname); 
    } 
}); 

... ähnlich dem, was hier vorgeschlagen ist: Loop through all Mongo collections and execute query

Ich bin jedoch keine Ergebnisse aus dem Skript zu bekommen.

Edit:

Wenn ich das tue ich das erwartete Found! erhalten:

var object = db['rightcollection'].findOne({'_id' : ObjectId("54d0232ef83ea4000d2c0610")}); 
if(object !== null){ 
    printjson("Found!"); 
} 

Aber die folgenden Renditen 0 (statt nichts, wie im ursprünglichen Beispiel der Rücksendung):

db.getCollectionNames().forEach(function(collname) { 
    var object = db[collname].findOne({'_id' : ObjectId("54d0232ef83ea4000d2c0610")}); 
    if(object !== null){ 
     printjson("Found in " >> collname); 
    } 
}); 
+0

Versuchen 'var object = db [collname] .find ({ '_ id': ObjectId ("54d0232ef83ea4000d2c0610") }); '. Mitteilung änderte 'ID' in '_id' – Veeram

+0

Versuchen Sie' findOne' anstelle von 'finden'. – JohnnyHK

+0

@Veeram 'id' statt' _id' war nur ein Tippfehler. Ich habe den ursprünglichen Post bearbeitet. – user41951

Antwort

0

versuchen Sie dies:

db.getCollectionNames().forEach(function(collName) { 
    var doc = db.getCollection(collName).findOne({"_id" : "54d0232ef83ea4000d2c0610"}); 
    if(doc != null) print(doc._id + " was found in " + collName); 
}); 

db.getCollection mit

Edit: Sie können auf diese Frage ausführlichere Informationen erhalten: Get a document in MongoDB without specifying collection

+1

Es funktioniert perfekt, danke! – user41951

+1

die ID muss nicht vom Typ sein ObjectId – CodingYourLife

+0

yeah Sie haben Recht, ich kopiere nur das Beispiel der Frage kopiert nur die Methode zu ändern, um die Sammlung zu erhalten. Ich werde bearbeiten –

Verwandte Themen