运行 mongodb 节点驱动程序中的自定义命令
Running custom commands in mongodb node driver
我需要为节点中的 hide/unhide mongo 索引创建一个代码。 node-mongodb-native although they exist on mongo shell.
上没有这样的方法
第二次尝试 运行 自定义命令,但 await db.command({ hideIndex: 'some_name' })
以 MongoServerError: no such command: 'hideIndex'
结束。
最后,我知道在旧版本中有 execute/eval 方法,但看起来它们在某些时候被删除了。我知道它会带来一些安全问题,允许某人 运行 自定义命令,但我不相信没有人需要从节点 运行 自定义一些东西,因为驱动程序中可用的方法列表如此有限?
这提出了一个问题:如何在节点 mongodb 驱动程序中 运行 自定义命令?
错误直接说发生了什么,没有这样的命令。 Mongosh 只是对几个命令的包装器来达到您需要的行为,并且这个助手在其他驱动程序中不存在(至少在大多数驱动程序中)。
您可以检查由 hideIndex
shell 助手执行的内部步骤(通过在没有 ()
的情况下启动此助手)并通过 runCommand
在节点中执行它们(在节点中它被称为只是command
)
MongoDB Enterprise replset:PRIMARY> db.coll.hideIndex
function(index) {
return this._hiddenIndex(index, true);
}
MongoDB Enterprise replset:PRIMARY> db.coll._hiddenIndex
function(index, hidden) {
assert(index, "please specify index to hide");
// Need an extra check for array because 'Array' is an 'object', but not every 'object' is an
// 'Array'.
var indexField = {};
if (typeof index == "string") {
indexField = {name: index, hidden: hidden};
} else if (typeof index == "object") {
indexField = {keyPattern: index, hidden: hidden};
} else {
throw new Error("Index must be either the index name or the index specification document");
}
var cmd = {"collMod": this._shortName, index: indexField};
var res = this._db.runCommand(cmd);
return res;
}
我需要为节点中的 hide/unhide mongo 索引创建一个代码。 node-mongodb-native although they exist on mongo shell.
上没有这样的方法第二次尝试 运行 自定义命令,但 await db.command({ hideIndex: 'some_name' })
以 MongoServerError: no such command: 'hideIndex'
结束。
最后,我知道在旧版本中有 execute/eval 方法,但看起来它们在某些时候被删除了。我知道它会带来一些安全问题,允许某人 运行 自定义命令,但我不相信没有人需要从节点 运行 自定义一些东西,因为驱动程序中可用的方法列表如此有限?
这提出了一个问题:如何在节点 mongodb 驱动程序中 运行 自定义命令?
错误直接说发生了什么,没有这样的命令。 Mongosh 只是对几个命令的包装器来达到您需要的行为,并且这个助手在其他驱动程序中不存在(至少在大多数驱动程序中)。
您可以检查由 hideIndex
shell 助手执行的内部步骤(通过在没有 ()
的情况下启动此助手)并通过 runCommand
在节点中执行它们(在节点中它被称为只是command
)
MongoDB Enterprise replset:PRIMARY> db.coll.hideIndex
function(index) {
return this._hiddenIndex(index, true);
}
MongoDB Enterprise replset:PRIMARY> db.coll._hiddenIndex
function(index, hidden) {
assert(index, "please specify index to hide");
// Need an extra check for array because 'Array' is an 'object', but not every 'object' is an
// 'Array'.
var indexField = {};
if (typeof index == "string") {
indexField = {name: index, hidden: hidden};
} else if (typeof index == "object") {
indexField = {keyPattern: index, hidden: hidden};
} else {
throw new Error("Index must be either the index name or the index specification document");
}
var cmd = {"collMod": this._shortName, index: indexField};
var res = this._db.runCommand(cmd);
return res;
}