我是 MongoDB 的新手,所以我可能只是遗漏了一些简单的东西。远程服务器有一个名为 DatabaseABC
的 MongoDB 数据库,它有一个名为 Logger
的集合。这个集合是巨大的。我想了解如何查询它而不必在查询之间等待几分钟的最佳方法是在本地复制集合中最后一天的文档。
根据我的阅读,我应该能够使用 cloneCollection并给它一个查询来过滤它。我无法让它工作。文档说,
You must connect directly to the mongod instance.
但是我不明白那是什么意思。如何使用 mongod
连接到本地数据库? mongod
似乎是启动数据库的一种方式,我可以这样做,但我不知道如何运行 { cloneCollection: "DatabaseABC.Logger", from: "mongoDevEtc.domain.net:27017", query: { TheTimestamp: "2015-05-13"} }
用它。
我需要婴儿学步。假设我有一个名为 test
的本地数据库。我打开了一个新的 Microsoft Windows 命令提示符,指向 mongod.exe 所在的 bin 目录。我输入什么命令才能将 2015 年 5 月 13 日写入的所有日志从 mongoDevEtc.domain.net:27017.DatabaseABC.Logger
移动到我位于 127.0.0.1:21000 的本地集合.test.Logger
(注意,记录器集合在本地还不存在)?
最佳答案
首先 mongod
是 MongoDB 服务器。它理解一堆不同的 commands ,但您需要使用客户端 来发出这些命令。 MongoDB 的标准客户端是 the Mongo Shell called mongo
.您可以直接从命令行调用它并开始发出一些命令。
现在,针对您的特定需求:cloneCollection
command允许您从远程服务器上的数据库中的一个集合复制到您本地服务器上不同数据库上的另一个集合(即:您的客户端已连接)。从 Mongo Shell,您可以使用 db.runCommand
发出此命令(就像任何其他“原始”命令一样) .类似的东西:
> db.runCommand(
{ cloneCollection: "DatabaseABC.Logger",
from: "mongoDevEtc.domain.net:27017",
query: { TheTimestamp: "2015-05-13" }
}
)
请注意,如果您的远程数据库与本地数据库同名,您可以使用 Mongo Shell 数据库方法 db.cloneCollection
相反:
> db.cloneCollection("mongoDevEtc.domain.net:27017",
"Logger",
{ TheTimestamp: "2015-05-13" })¶
正如您在下面看到的,db.cloneCollection
是 cloneCollection
数据库命令的简单包装器:
> db.cloneCollection
function (from, collection, query) {
assert( isString(from) && from.length );
assert( isString(collection) && collection.length );
collection = this._name + "." + collection;
query = query || {};
return this._dbCommand( { cloneCollection:collection, from:from, query:query } );
}
关于mongodb - 如何将集合的一部分从远程服务器复制到 MongoDB 中的本地数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223763/