Get a document in MongoDB without specifying collection

前端 未结 2 1342
我在风中等你
我在风中等你 2020-12-03 18:38

MongoDB IDs are unique for a single database cluster. Is it possible to get documents using their IDs, without specifying the collection name?

If yes, how?

I

相关标签:
2条回答
  • 2020-12-03 19:18

    ObjectId is designed to be globally unique (worldwide, not just within a single cluster). And it pretty much is.

    It includes time, machine id, process id and a random number. However, it does not include database or collection name. Therefore, it is impossible to fetch a document using only the id. You have to provide database and collection names as well.

    0 讨论(0)
  • 2020-12-03 19:34

    Yes, but not in a scalable way (since you must query each collection). If you have 2 or 3 collections, this might be ok, but... you probably should review your design to figure out why you're doing this. Why are you, by the way?

    1. You get a list of all of the collections in the database.
    2. You loop through them, and query based on _id

    Sample shell code:

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

    gives: 4f62635623809b75e6b8853c was found in test2

    0 讨论(0)
提交回复
热议问题