2012-03-15 12 views

Respuesta

7

Sí, pero no de una manera escalable (ya que debe consultar cada colección). Si tiene 2 o 3 colecciones, esto podría estar bien, pero ... probablemente deba revisar su diseño para descubrir por qué lo hace. ¿Por qué estás, por cierto?

  1. Obtiene una lista de todas las colecciones en la base de datos.
  2. Usted bucle a través de ellos, y la consulta basada en _id

Muestra código shell:

db.test1.save({}); 
db.test2.save({}); 
db.test3.save({}); 
db.test4.save({}); 
db.test5.save({}); 
db.test6.save({}); 

db.test2.findOne(); // gives: { "_id" : ObjectId("4f62635623809b75e6b8853c") } 

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

da: 4f62635623809b75e6b8853c was found in test2

2

OBJECTID está diseñado para ser único global (en todo el mundo, no sólo dentro de un solo grupo). Y es más o menos así.

Incluye tiempo, ID de la máquina, ID de proceso y un número aleatorio. Sin embargo, no incluye la base de datos o el nombre de la colección. Por lo tanto, es imposible buscar un documento utilizando solo el id. También debe proporcionar nombres de bases de datos y colecciones.

+0

pero no estoy interesado en la colección - Soy interesado en el objeto mismo! En otras palabras, no me importa no saber a qué colección pertenece el objeto buscado. ¿Esto significa que no hay una sola lista de todos los objetos en la base de datos? – sssilver

+0

Eso es correcto. No hay tal lista. –

+2

que mata a una gran cantidad de genialidad único global :( – sssilver

Cuestiones relacionadas