MongoDB:在不知道集合的情况下通过其ID查找对象

时间:2017-03-07 19:19:33

标签: mongodb mongodb-query robo3t

我有一个拥有100多个收藏品的mongodb数据库。我正在尝试找到一个具有已知ObjectID的对象,该对象属于此数据库的某个(未知)集合。

我试着这样做:

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

...类似于此处的建议:Loop through all Mongo collections and execute query

但是,我没有从脚本中得到任何结果。

编辑:

当我这样做时,我得到了预期的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);
    }
});

1 个答案:

答案 0 :(得分:5)

试试这个:

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

编辑:您可以获得有关此问题的更多详细信息:Get a document in MongoDB without specifying collection