我有一个拥有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);
}
});
答案 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