2011-08-26 12 views

Odpowiedz

42

Aktualizacja:

MongoServer.Create jest już nieaktualne (dzięki @ aknuds1). Zamiast tego użyć poniższy kod:

var _server = new MongoClient(connectionString).GetServer(); 

To proste. Najpierw należy pobrać nazwę bazy danych z ciągu połączenia, a następnie pobrać bazę danych według nazwy. Kompletny przykład:

var connectionString = "mongodb://localhost:27020/mydb"; 

//take database name from connection string 
var _databaseName = MongoUrl.Create(connectionString).DatabaseName; 
var _server = MongoServer.Create(connectionString); 

//and then get database by database name: 
_server.GetDatabase(_databaseName); 

Ważne: Jeśli baza danych i baza danych uwierzytelniania są różne, można dodać parametr = zapytań authSource aby określić inną bazę danych uwierzytelniania. (Dziękuję @chrisdrobison)

From docs:

UWAGA Jeśli używasz segment bazy danych jako początkowej bazy danych do użytku, ale nazwa użytkownika i hasło podane są zdefiniowane w innej bazy danych, można użyć opcja authSource określająca bazę danych , w której zdefiniowano poświadczenie. Na przykład: mongodb: // użytkownik: pass @ nazwa_hosta/db1? AuthSource = userDb uwierzytelniłby poświadczenie w bazie danych userDb zamiast db1.

+0

Ah, ok - widzę mój problem. Nie mam dostępu do ciągu połączenia, ale tylko do już utworzonego obiektu MongoServer. I nie wydaje się wiedzieć o bazie danych określonych przez połączenie. Dzięki. –

+0

MongoServer.Create jest przestarzały. – aknuds1

+0

@ aknuds1: Dzięki, odpowiedź zostanie zaktualizowana. –

4

Poniższa odpowiedź wydaje się być już przestarzała, ale działa ze starszymi sterownikami. Zobacz komentarze.

Jeśli masz ciąg połączenia można również użyć MongoDatabase bezpośrednio:

var db = MongoDatabase.Create(connectionString); 
var coll = db.GetCollection("MyCollection"); 
+0

W miarę upływu czasu, MongoDatabase.Create() jest przestarzała od wersji sterownika 1.7 – runTarm

+0

@runTarm Ale czas się toczy, a specyfikacja nazw baz danych w łańcuchach połączeń C# mongo nie jest przestarzała. –

8

Z wersji 1.7 oficjalnego kierowcy 10gen, to jest obecny (non-przestarzała) API:

const string uri = "mongodb://localhost/mydb"; 
var client = new MongoClient(uri); 
var db = client.GetServer().GetDatabase(new MongoUrl(uri).DatabaseName); 
var collection = db.GetCollection("mycollection"); 
+0

fwif: Działa to również w Xamarin Studio 5.8.1 przy użyciu sterownika mongo 1.10 –

2

W tym momencie z ostatnią wersją sterownika C# (2.3.0) jedynym sposobem znalezienia nazwy bazy danych w łańcuchu połączenia jest:

var connectionString = @"mongodb://usr:[email protected],srv2.acme.net,srv3.acme.net/dbName?replicaSet=rset"; 
var mongoUrl = new MongoUrl(connectionString); 
var dbname = mongoUrl.DatabaseName; 
var db = new MongoClient(mongoUrl).GetDatabase(dbname); 
db.GetCollection<MyType>("myCollectionName"); 
+1

To powinno być przegłosowane, chociaż wiem, że to stary wątek. Jest to jedyny sposób, aby uzyskać to w wersji 2.3. Dzięki za odpowiedź, szukanie tutaj wymagało trochę wysiłku. – ejcortes