Helpex - Trao đổi & giúp đỡ Đăng nhập
72

Tôi muốn kết nối với cơ sở dữ liệu được chỉ định trong chuỗi kết nối mà không cần chỉ định lại trong GetDatabase.

Ví dụ, nếu tôi có một chuỗi kết nối như thế này;

mongodb://localhost/mydb

Tôi muốn có thể db.GetCollection("mycollection")từ mydb.

Điều này sẽ cho phép tên cơ sở dữ liệu được định cấu hình dễ dàng trong tệp app.config.

72 hữu ích 0 bình luận 109k xem chia sẻ
78

Cập nhật:

MongoServer.Createhiện đã lỗi thời (nhờ @ aknuds1). Thay vào đó, hãy sử dụng mã sau:

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

Dễ thôi. Trước tiên, bạn nên lấy tên cơ sở dữ liệu từ chuỗi kết nối và sau đó lấy cơ sở dữ liệu theo tên. Toàn bộ ví dụ:

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

Quan trọng : Nếu cơ sở dữ liệu của bạn và cơ sở dữ liệu auth khác nhau, bạn có thể thêm tham số authSource = query để chỉ định một cơ sở dữ liệu auth khác. (cảm ơn bạn @chrisdrobison )

Từ tài liệu:

LƯU Ý Nếu bạn đang sử dụng phân đoạn cơ sở dữ liệu làm cơ sở dữ liệu ban đầu để sử dụng, nhưng tên người dùng và mật khẩu được chỉ định được xác định trong một cơ sở dữ liệu khác, bạn có thể sử dụng tùy chọn authSource để chỉ định cơ sở dữ liệu mà thông tin đăng nhập được xác định. Ví dụ: mongodb: // user: pass @ hostname / db1? AuthSource = userDb sẽ xác thực thông tin đăng nhập dựa trên cơ sở dữ liệu userDb thay vì db1.

78 hữu ích 4 bình luận chia sẻ
19

Trong thời điểm này với phiên bản mới nhất của trình điều khiển C # (2.3.0), cách duy nhất tôi tìm thấy để lấy tên cơ sở dữ liệu được chỉ định trong chuỗi kết nối là:

var connectionString = @"mongodb://usr:pwd@srv1.acme.net,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");
19 hữu ích 1 bình luận chia sẻ
9

Với phiên bản 1.7 của trình điều khiển 10gen chính thức, đây là API hiện tại (không lỗi thời):

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");
9 hữu ích 1 bình luận chia sẻ
5

Câu trả lời dưới đây dường như đã lỗi thời, nhưng hoạt động với các trình điều khiển cũ hơn. Xem ý kiến.

Nếu bạn có chuỗi kết nối, bạn cũng có thể sử dụng MongoDatabase trực tiếp:

var db =  MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");
5 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# mongodb mongodb-.net-driver , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading