我该如何通过查询特殊的$cmd集合来运行MongoDB命令?

5
我正在尝试实现一个MongoDB驱动程序(实际上我不是从头开始实现,我正在改进一个现有的小型驱动程序,但这与本题无关)。向MongoDB发出命令似乎只需通过对$cmd集合执行特殊查询来完成。在 MongoDB词汇表中如下描述:

$cmd

一个特殊的虚拟集合,公开了MongoDB的数据库命令。要使用数据库命令,请参见发出命令。

好的。那我怎么做呢?看一下 使用数据库命令怎么样?
许多驱动程序提供了db.runCommand()方法的等价物。内部使用db.runCommand()运行命令等同于针对$cmd集合的特殊查询。
嗯,好吧。这没什么帮助。我在写驱动程序,而不是使用驱动程序。

是否有关于如何实际实现runCommand功能的文档?针对$cmd的查询应该如何工作?


5
也许观察其他驱动程序如何实现会有所帮助。你可以查看 PyMongo 的 command 方法,它类似于 runCommand。这是链接 - https://github.com/mongodb/mongo-python-driver/blob/a7575fa14f5a9aaeb0149981899f776af9e1ad1c/pymongo/database.py - Abhay PS
考虑编写驱动程序的语言种类是一件有趣的事情,因为我认为已经有相当广泛的覆盖面了,尽管某些语言实现无疑可以更好。如果您真的需要创建新的语言驱动程序或者只是“打造更好的老鼠夹”,您可以随时在聊天中与我联系(因为您已经具备了所需的声望)。 - Neil Lunn
1个回答

1

对于 $cmd 的查询应该如何工作?

数据库命令是对特殊集合 $cmd 的查询,其中查询选择器定义了命令本身。因此,使用 db.runCommand({isMaster: 1}) 运行命令的等效查询为:

db.$cmd.findOne({isMaster: 1})

在我的机器上,它们都生成了以下结果:
{
        "ismaster" : true,
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2016-04-22T12:46:02.378Z"),
        "maxWireVersion" : 4,
        "minWireVersion" : 0,
        "ok" : 1
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接