MongoDB的ID对于单个数据库集群是唯一的。是否可以通过ID获取文档,而不需要指定集合名称?
如果可以,如何实现?
如果不行,为什么不行?
可以这样做,但不具有可扩展性(因为您必须查询每个集合)。如果您只有 2 或 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 在 test2 中被发现
ObjectId旨在全球范围内(不仅限于单个集群)具有全局唯一性。而且它基本上是如此。
它包括时间、机器ID、进程ID和一个随机数。但是,它不包括数据库或集合名称。因此,仅使用ID无法获取文档。您还需要提供数据库和集合名称。