如何让MongoDB脚本在数据库或集合不存在时抛出错误
在Mongosh中检测不存在的数据库/集合并抛出错误
MongoDB的默认行为是延迟创建数据库和集合——只有当你向数据库写入数据(比如插入文档)时,数据库才会真正被创建;同理,集合也是在首次写入时才会生成。这就是为什么单纯获取不存在的数据库/集合引用不会触发错误的原因。
要实现“不存在时抛出错误”的需求,你需要主动检查目标数据库或集合是否存在,具体方法如下:
1. 检查数据库是否存在
通过adminCommand('listDatabases')获取所有已存在的数据库列表,再判断目标数据库是否在列表中:
// 封装带检查的数据库获取函数 function getDBWithCheck(connection, dbName) { const dbList = connection.adminCommand('listDatabases').databases; const dbExists = dbList.some(item => item.name === dbName); if (!dbExists) { throw new Error(`错误:数据库 "${dbName}" 不存在`); } return connection.getDB(dbName); } // 使用示例 let connect = Mongo("mongodb://localhost/"); let db = getDBWithCheck(connect, "not_a_db"); // 数据库不存在时会抛出错误
2. 检查集合是否存在
在已确认存在的数据库中,通过getCollectionNames()或listCollections()获取集合列表,判断目标集合是否存在:
// 封装带检查的集合获取函数 function getCollectionWithCheck(db, collName) { const collList = db.getCollectionNames(); const collExists = collList.includes(collName); if (!collExists) { throw new Error(`错误:集合 "${collName}" 不存在`); } return db.getCollection(collName); } // 使用示例 let coll = getCollectionWithCheck(db, "not_a_collection"); // 集合不存在时会抛出错误
补充说明
- 如果你只是读取数据(比如
countDocuments()),即使数据库/集合不存在,MongoDB也会返回空结果(比如0),不会触发错误,因为它不会主动创建资源。 - 上述检查方法会实时查询当前的数据库/集合列表,确保判断的准确性。
内容的提问来源于stack exchange,提问作者moefinley
相关产品推荐
相关产品推荐

