2011-08-26 10 views

risposta

42

Aggiornamento:

MongoServer.Create è obsoleta adesso (grazie a @ aknuds1). Invece questo uso seguente codice:

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

E 'facile. Devi prima prendere il nome del database dalla stringa di connessione e quindi ottenere il database per nome. Esempio completo:

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); 

Importante: Se il database e il database di autenticazione sono diversi, è possibile aggiungere un parametro di query = authSource per specificare un database di autenticazione diverso. (Grazie a @chrisdrobison)

From docs:

NOTA Se si utilizza il segmento database come il database iniziale per uso, ma il nome utente e la password specificati sono definiti in un database diverso , è possibile utilizzare l'opzione authSource per specificare il database in cui è definita la credenziale. Ad esempio, mongodb: // user: pass @ nomehost/db1? AuthSource = userDb autenticherebbe le credenziali rispetto al database userDb anziché a db1.

+0

Ah, ok - Vedo il mio problema. Non ho accesso alla stringa di connessione, ma solo all'oggetto MongoServer già creato. E non sembra conoscere il database specificato dalla stringa di connessione. Grazie. –

+0

MongoServer.Create è obsoleto. – aknuds1

+0

@ aknuds1: Grazie, la risposta è aggiornata. –

4

La risposta è ora apparentemente obsoleta, ma funziona con driver precedenti. Vedi i commenti.

Se avete la stringa di connessione si potrebbe anche usare MongoDatabase direttamente:

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

Con il passare del tempo, MongoDatabase.Create() è stato reso obsoleto dal driver versione 1.7 – runTarm

+0

@runTarm, ma il tempo passa e la specifica dei nomi dei database nelle stringhe di connessione Congo non viene resa obsoleta. –

8

Con la versione 1.7 del driver ufficiale 10gen, questa è la corrente (non obsoleto) 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: funziona anche in Xamarin Studio 5.8.1 usando il driver mongo 1.10 –

2

In questo momento con l'ultima versione del driver C# (2.3.0) l'unico modo che ho trovato per ottenere il nome del database specificato nella stringa di connessione è questo:

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

Questo dovrebbe essere messo in up, anche se so che questo è un thread vecchio. Questo è l'unico modo per ottenere questo nella versione 2.3. Grazie per la risposta, ci sono volute alcune ricerche per arrivare qui. – ejcortes

Problemi correlati