Làm cách nào để lấy tên cột trong MongoDB?

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

In 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

________số 8

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

Làm cách nào để lấy tên cột trong MongoDB?

0

con 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

Làm cách nào để lấy tên cột trong MongoDB?

1

JavaScript

Hoặc, bạn có thể sử dụng JavaScript

Làm cách nào để lấy tên cột trong MongoDB?

2

Sau 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" })
0

Rấ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

Làm cách nào để liệt kê DBS trong MongoDB?

Liệt kê tất cả các cơ sở dữ liệu trong bảng điều khiển mongoDB đang sử dụng lệnh show dbs .

Làm cách nào để lấy tất cả tên bộ sưu tập trong MongoDB?

Để liệt kê tất cả các bộ sưu tập trong Mongo shell, bạn có thể sử dụng hàm getCollectionNames() .

Các cột được gọi trong MongoDB là gì?

Trong RDBMS, cột biểu thị một tập hợp các giá trị dữ liệu. Những thứ này trong MongoDB được gọi là Trường . Trong RDBMS, dữ liệu đôi khi trải rộng trên nhiều bảng khác nhau và để hiển thị chế độ xem đầy đủ của tất cả dữ liệu, một liên kết đôi khi được hình thành trên các bảng để lấy dữ liệu.

Làm cách nào để lấy giá trị trường trong MongoDB?

Trả về giá trị của trường được chỉ định từ tài liệu. Nếu bạn không chỉ định một đối tượng, $getField trả về giá trị của trường từ $$CURRENT. Bạn có thể sử dụng $getField để truy xuất giá trị của các trường có tên chứa dấu chấm (. ) hoặc bắt đầu bằng ký hiệu đô la ($ ).