Получить документ в MongoDB без указания коллекции - PullRequest
7 голосов
/ 16 марта 2012

Идентификаторы MongoDB уникальны для одного кластера базы данных. Можно ли получить документы, используя их идентификаторы, без указания названия коллекции?

Если да, то как?

Если нет, то почему?

Ответы [ 2 ]

9 голосов
/ 16 марта 2012

Да, но не масштабируемым способом (поскольку вы должны запрашивать каждую коллекцию).Если у вас есть 2 или 3 коллекции, это может быть хорошо, но ... вам, вероятно, следует пересмотреть свой дизайн, чтобы выяснить, почему вы это делаете.Кстати, почему?

  1. Вы получаете список всех коллекций в базе данных.
  2. Вы просматриваете их и делаете запрос на основе _id

Пример кода оболочки:

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

дает: 4f62635623809b75e6b8853c was found in test2

2 голосов
/ 16 марта 2012

ObjectId разработан, чтобы быть глобально уникальным (во всем мире, а не только в пределах одного кластера). И это в значительной степени.

Включает время, идентификатор машины, идентификатор процесса и случайное число. Однако он не включает имя базы данных или коллекции. Поэтому невозможно получить документ, используя только идентификатор. Вы также должны указать имена баз данных и коллекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...