Tôi đang sử dụng mã này để nhận các cột từ bộ sưu tập mongoDB. Bộ sưu tập bình thường nó sẽ hoạt động nhưng bộ sưu tập loại Chế độ xem không hoạt động. Vì vậy, tôi cần tên cột từ kiểu xem của bộ sưu tập
var client = new MongoClient[Connstr];
var DB = client.GetDatabase[dbname];
var collection = DB.GetCollection[tablename];
var cursor = collection.FindAsync[new
BsonDocument[]].Result.ToListAsync[].Result;
foreach [BsonDocument document in cursor]
{
Type type;
var typestring = Enum.GetName[typeof[BsonType],
column.Value.BsonType];
Columnlist.Add[column.Name];
}
____1In above image "AnalyticsView" is a view type collection.
I am using MongoDb Driver for Getting columns.
Để xác thực lược đồ của bạn, gỡ lỗi lỗi chính tả trong các trường hoặc tìm các trường không được đặt, bạn sẽ cần hiểu về tất cả các khóa trong bộ sưu tập MongoDB của mình
Nhiều công ty dịch vụ MongoDB cung cấp một cách dễ dàng để thực hiện việc này ngay trong giao diện người dùng, bao gồm cả ObjectRocket. Người dùng MongoDB dày dạn kinh nghiệm thường bắt đầu với một trình ánh xạ tài liệu đối tượng [ODM], chẳng hạn như Mongoose cho JS hoặc Mongoengine cho Python, để họ có thể xây dựng một lược đồ nhất quán cho ứng dụng của mình và giảm lỗi chính tả. [ODM cũng thực hiện xác thực kiểu, vì vậy bạn không vô tình đặt một chuỗi vào trường có số nguyên và áp dụng toán học cho nó. ]
Nếu bạn không có dịch vụ hoặc ODM, có một số phương pháp khác mà bạn có thể sử dụng để truy cập các khóa. Dưới đây là những cách tốt nhất mà chúng tôi đã tìm thấy để lấy tất cả các khóa trong bộ sưu tập MongoDB cho các trường hợp khác nhau
Một ví dụ
db.activities.insert[ { type : [‘indoor’, 'outdoor' , ‘mixed’] } ];
db.activities.insert[ { activity : 'cycling' } ];
db.activities.insert[ { activity : ‘skiing’, location: ‘Alpes’, } ];
db.activities.insert[ { equipment : [‘paddles’,‘sunglasses’] } ];
Bạn muốn nhận các khóa duy nhất.
loại, hoạt động, thiết bị, địa điểm
Bản đồGiảm
Bạn có thể làm điều này với MapReduce
mr = db.runCommand[{ "mapreduce" : "activities", "map" : function[] { for [var key in this] { emit[key, null]; } }, "reduce" : function[key, stuff] { return null; }, "out": "activities" + "_keys" }]
Sau khi hoàn tất, hãy chạy lệnh riêng biệt trên bộ sưu tập kết quả để tìm tất cả các khóa
db.activities_keys.distinct["_id"]
Nếu bạn muốn lấy danh sách tất cả các khóa duy nhất trong tài liệu con, chỉ cần sửa đổi dòng này
for [var key in this.first_level.second_level.nth_level] { emit[key, null]; }
tổng hợp
Bạn cũng có thể sử dụng tổng hợp. Phương pháp này hoạt động với tất cả các trình điều khiển hỗ trợ khung tổng hợp. Với các tập hợp của bạn, $sample hoặc $limit có thể được sử dụng để giảm chi phí
Ghi chú. Chạy với tùy chọn đọc chính có thể ảnh hưởng đến hiệu suất. Cân nhắc chạy với tùy chọn đọc phụ
Sử dụng tổng hợp với $objectToArrray [có sẵn trong phiên bản 3. 4. 4 trở lên] để chuyển đổi tất cả các cặp khóa và giá trị hàng đầu thành mảng tài liệu, theo sau là $unwind và $group cùng với $addToSet để nhận các khóa riêng biệt trên toàn bộ bộ sưu tập
$$ROOT để tham khảo tài liệu cấp cao nhất
db.activities.aggregate[[ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$unwind":"$arrayofkeyvalue"}, {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}} ]]
Nhận chìa khóa trong một tài liệu duy nhất
Bạn cũng có thể sử dụng tính năng tổng hợp để lấy khóa trong một tài liệu
vỏ mongo
Bạn cũng có thể thử điều này trong ứng dụng khách mongo shell
var allKeys = {}; db.YOURCOLLECTION.find[].forEach[function[doc]{Object.keys[doc].forEach[function[key]{allKeys[key]=1}]}]; allKeys;
Các trường đầu ra cho một tài liệu
Nếu bạn cần đầu ra của các trường cho một tài liệu trong một bộ sưu tập [vì tất cả các trường khác có thể có các khóa hoàn toàn khác nhau], hãy sử dụng cách sau
0con trăn
Hoặc, bạn có thể sử dụng Python. Điều này trả về tập hợp tất cả các khóa cấp cao nhất trong bộ sưu tập
1JavaScript
Hoặc, bạn có thể sử dụng JavaScript
2Sau khi đọc bộ sưu tập mới được tạo “allFieldNames”, hãy xóa nó
mr = db.runCommand[{ "mapreduce" : "activities", "map" : function[] { for [var key in this] { emit[key, null]; } }, "reduce" : function[key, stuff] { return null; }, "out": "activities" + "_keys" }]
0Rất nhiều lựa chọn…
Bạn có rất nhiều lựa chọn để lấy các phím Mongo này. Nếu bạn bị choáng ngợp bởi quản lý MongoDB và muốn tập trung vào mã của mình thay vì quản lý cơ sở dữ liệu, thì chúng tôi ở đây dành cho bạn. Hãy dùng thử miễn phí nền tảng cơ sở dữ liệu và bộ phận hỗ trợ găng tay trắng của chúng tôi