我们有几个驱动程序可以帮助您完成此过程。我假定了一些软件开发的知识,并将展示我们的MongoDB的ADO.NET Provider,它使用了熟悉的MongoDBConnection
,MongoDBCommand
和MongoDBDataReader
对象。
首先,你要创建的连接字符串与您连接云MongoDB实例:
string connString = "Auth Database=test;Database=test;Password=test;Port=27117;Server=http://clouddbaddress;User=test;Flatten Objects=false";
你会注意到,我们有拼合对象属性设置为false,这确保了任何JSON /文档中包含的BSON对象将作为原始JSON/BSON返回。
创建连接字符串后,您可以建立连接并从数据库中读取数据。您需要以某种方式存储返回的数据,以便您可以轻松访问以供将来使用。
List<string> columns = new List<string>();
List<object> values;
List<List<object>> rows = new List<List<object>>();
using (MongoDBConnection conn = new MongoDBConnection(connString))
{
//create a WHERE clause that will limit the results to newly added documents
MongoDBCommand cmd = new MongoDBCommand("SELECT * FROM SomeTable WHERE ...", conn);
rdr = cmd.ExecuteReader();
results = 0;
while (rdr.Read())
{
values = new List<object>();
for (int i = 0; i < rdr.FieldCount; i++)
{
if (results == 0)
columns.Add(rdr.GetName(i));
values.Add(rdr.GetValue(i));
}
rows.Add(values);
results++;
}
}
您收集了所有的每个要复制的对象的数据后,可以配置到本地MongoDB实例的新连接,并建立查询,插入新的文件。
connString = "Auth Database=testSync;Database=testSync;Password=testSync;Port=27117;Server=localhost;User=testSync;Flatten Objects=false";
using (MongoDBConnection conn = new MongoDBConnection(connString)) {
foreach (var row in rows) {
//code here to create comma-separated strings for the columns
// and values to be inserted in a SQL statement
String sqlInsert = "INSERT INTO backup_table (" + column_names + ") VALUES (" + column_values + ")";
MongoDBCommand cmd = new MongoDBCommand(sqlInsert, conn);
cmd.ExecuteQuery();
}
此时,您将插入所有新文档。然后,您可以根据更新的日期/时间更改过滤器(开头的WHERE子句),并使用UPDATE命令更新其在本地MongoDB实例中的相应条目。
事情看出来:
- 确保你正确地筛选出新的/更新的条目。
- 确保您正确解释变量的类型,以便在SQL查询中输入值时正确包围引号(或不包含引号)。
我们有几个可能对您有用的驱动程序。我上面演示了ADO.NET Provider,但我们也有driver for writing apps in Xamarin和JDBC driver (for Java)。
我们的[MongoDB驱动程序](http://www.cdata.com/drivers/mongodb/)中的任何一个都可以让您构建自己的应用程序,以将新的/更新的文档从基于云的数据库推送到本地数据库。我会得到一个正确的答案,并很快发布。 –