MongoDB: найти объект по его идентификатору, не зная коллекции

У меня есть база данных mongodb с более чем 100 коллекциями. Я пытаюсь найти объект с известным ObjectID, который принадлежит какой-то (неизвестной) коллекции этой базы данных.

Я пытался сделать:

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

... аналогично тому, что предлагается здесь: Перебрать все коллекции Mongo и выполнить запрос

Однако я не получаю никаких результатов от сценария.

Редактировать:

Когда я это делаю, я получаю ожидаемое Found!:

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

Но следующее возвращает 0 (вместо того, чтобы ничего не возвращать, как в исходном примере):

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

person user41951    schedule 07.03.2017    source источник
comment
Попробуйте var object = db[collname].find({'_id' : ObjectId("54d0232ef83ea4000d2c0610")});. Уведомление изменено с id на _id   -  person s7vr    schedule 07.03.2017
comment
Попробуйте использовать findOne вместо find.   -  person JohnnyHK    schedule 07.03.2017
comment
@Veeram idвместо _id было просто опечаткой. Я отредактировал исходный пост.   -  person user41951    schedule 08.03.2017
comment
@JohnnyHK Используя findOne, я получаю TypeError: object is null : @(shell):3:1 @(shell):1:1   -  person user41951    schedule 08.03.2017


Ответы (1)


попробуй это:

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

Изменить: вы можете получить более подробную информацию по этому вопросу: Получить документ в MongoDB без указания коллекции

person Miguel Luisillo    schedule 31.07.2017
comment
идентификатор не обязательно должен быть типа ObjectId - person CodingYourLife; 14.02.2018
comment
да, вы правы, я просто скопировал пример вопроса, изменив только метод получения коллекции. я отредактирую - person Miguel Luisillo; 21.02.2018
comment
У меня сработало добавление метода ObjectId() var doc = db.getCollection(collName).findOne({"_id" : ObjectId("54d0232ef83ea4000d2c0610")}); Спасибо. - person Cibergarri; 08.12.2020