运行 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;
    }