阅读Mongo:明确指南:
在第一章中,作者提到以下代码片段来更改一些默认命令db
:
var no = function() {
print("Not on my watch.");
};
// Prevent dropping databases
db.dropDatabase = DB.prototype.dropDatabase = no;
// Prevent dropping collections
DBCollection.prototype.drop = no;
// Prevent dropping an index
DBCollection.prototype.dropIndex = no;
// Prevent dropping indexes
DBCollection.prototype.dropIndexes = no;
我知道db
指向当前数据库,但我的问题是它DB
来自哪里?
这是指旧版mongo shell,它在 MongoDB v5.0 中已弃用,并已被mongosh取代。
DB
壳里没有mongosh
。如果您使用旧版本的 MongoDB 并
mongo
安装了 shell,那么DB
是一个全局变量,它解析为具有由立即调用函数表达式 (IIFE) 设置的属性的函数作为db.js
执行的一部分。它
DB.prototype.dropDatabase
也是一个函数,因此通过运行db.dropDatabase = DB.prototype.dropDatabase = no;
您将引用dropDatabase
现在指向您的no
函数的函数。