在MongoDB中获取文档而不指定集合

时间:2012-03-15 21:09:09

标签: mongodb database nosql

MongoDB ID对于单个数据库群集是唯一的。是否可以使用其ID来获取文档,而无需指定集合名称?

如果是,怎么样?

如果不是,为什么不呢?

2 个答案:

答案 0 :(得分:9)

是的,但不是以可扩展的方式(因为您必须查询每个集合)。如果您有2个或3个集合,这可能没问题,但是......您可能应该检查您的设计以找出您为什么这样做。顺便问一下你为什么这么做?

  1. 您将获得数据库中所有集合的列表。
  2. 循环遍历它们,并根据_id
  3. 进行查询

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

    给出:4f62635623809b75e6b8853c was found in test2

答案 1 :(得分:2)

ObjectId旨在全球唯一(全球范围内,而不仅仅是在单个群集中)。它几乎就是。

它包括时间,机器ID,进程ID和随机数。但是,它不包括数据库或集合名称。因此,仅使用id获取文档是不可能的。您还必须提供数据库和集合名称。