繁体   English   中英

如何使用C#驱动程序设置MongoDB的路径?

[英]How can I set MongoDB's path with the C# driver?

我目前使用以下命令行运行指向相应数据目录的MongoDB:

mongod --dbpath "somePath/data"

但是目前这是我在运行特定测试套件之前运行的手动步骤。 有没有一种方法可以使用Mongo C#驱动程序在代码内设置路径(无需调用脚本或批处理文件)以使用特定的数据目录?

更新

明确地说,我要这样做的原因不是在生产代码中使用,而是要隔离用于不同测试套件的测试数据库,并指向一次性的隔离数据目录,以便每个服务器实例在当时都是干净的运行测试的数据,并且仅填充与生产相同的服务器设置所需的数据。

您可能找不到任何方法。 Mongo C#驱动程序用于编程MongoClient,而不是服务器。 MongoDB的C#驱动程序的文档说MongoClient class serves as the root object for working with a MongoDB server 对客户端进行编程时,将自动假定服务器已启动并正在运行。 不管您是手动执行此操作还是为其编写其他代码,情况都不同。

您很少允许人们连接到计算机并让他们启动服务器和客户机 为什么稀有呢? 您可以尝试在另一台计算机上启动服务器然后将其与该计算机连接(这也可能会提供其他一些完全不同的服务!)。 有一些方法(有时需要它)可以远程启动服务器,但这不是使用MongoDB C#驱动程序可以做到的。

现在,为了完成任务,您可以尝试以下操作:

在服务器上为每个数据库启动一个mongod,并使每个mongod侦听不同的端口。 然后,在代码中,您可以将MongoClient连接到在相关数据库端口上运行的mongod。 您可以通过使用简单的if条件(或交换条件)并检查MongoClient想要连接到哪个数据库,然后找到正确的端口值放入连接字符串中来实现此目的。 每个mongod只能服务一个或多个数据库或任何您想要的数据库。

因此,如果您在端口1,端口2和端口3上运行三个mongod ,并且所有这三个都连接到它们各自的数据库路径,则代码可能会像这样:

var DBNAME = name_of_the_db;
string connectionString;

switch (DBNAME)
{
    case name_of_first_DB:
        connectionString = "mongodb://[user:pass@]hostname[:port1][/[DBNAME][?options]]";
        break;
    case name_of_second_DB:
        connectionString = "mongodb://[user:pass@]hostname[:port2][/[DBNAME][?options]]";
        break;
    case name_of_third_DB:
        connectionString = "mongodb://[user:pass@]hostname[:port3][/[DBNAME][?options]]";
        break;
    default:
        Console.WriteLine("Invalid DB Name");
}

回答问题的更新部分:您可以在服务器的不同分区上启动mongod 甚至完全从不同的驱动器启动守护程序,并使其监听不同的端口。 毋庸置疑,对于任何两个数据库来说,dbpath都不应指向同一驱动器,以至少非常接近地模仿您想要的内容。

为了完成这个答案,我要添加@Schaliasos在评论中提到的内容。考虑将mongo作为窗口服务安装

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM