MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tạo chỉ mục MongoDB MultiKey trên thuộc tính của các mục trong một mảng .NET Driver

Đây là một ví dụ về cách thực hiện với C #

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2));

await collection.Indexes.CreateOneAsync(indexDefinition); 

CẬP NHẬT

Về chỉ mục trong mảng, gần nhất những gì tôi có thể tìm thấy là sử dụng "-1" làm chỉ mục khi bạn tạo khóa chỉ mục của mình. Theo tôi hiểu, mã nguồn github là một tùy chọn hợp lệ trong trường hợp xây dựng truy vấn.

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-1].Key));

await collection.Indexes.CreateOneAsync(indexDefinition); 

"-1" là một hằng số được mã hóa cứng trong các trình điều khiển C # bên mongodb có nghĩa là "$" ( chống lại ). Vì vậy, mã này sẽ cố gắng tạo chỉ mục:

{ "Key1": 1, "Key2.$.Key": 1 }

điều này tốt cho việc truy vấn thông tin từ cơ sở dữ liệu, nhưng không được phép (sẽ đưa ra một ngoại lệ "Khóa chỉ mục chứa tên trường không hợp lệ:tên trường bắt đầu bằng '$'") để sử dụng trong chỉ mục. Vì vậy, tôi cho rằng nó nên được thay đổi trong trình điều khiển mongodb để làm cho nó hoạt động. Một cái gì đó như "-2" có nghĩa là toán tử trống. Trong trường hợp đó, chúng tôi có thể sử dụng

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-2].Key));

await collection.Indexes.CreateOneAsync(indexDefinition); 

sẽ tạo chỉ mục như:

{ "Key1": 1, "Key2.Key": 1 }

Vì vậy, về cơ bản, tôi không nghĩ rằng hiện tại có thể tạo chỉ mục bạn muốn bằng Linq thuần túy mà không cần thay đổi trình điều khiển C # mongo.

Vì vậy, tôi nghĩ lựa chọn duy nhất của bạn làm như thế này, vẫn là C # nhưng không có Linq

await collection.Indexes.CreateOneAsync(new BsonDocument {{"name", 1}, {"bars.key", 1}});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo DB - xuất ở chế độ mở rộng JSON

  2. Có bất kỳ lợi ích nào khi sử dụng _id tùy chỉnh cho tài liệu trong MongoDB không?

  3. Kết nối với bộ bản sao MongoDB bằng rmongodb

  4. Làm cách nào để bạn thực hiện truy vấn AND trên một mảng trong mongodb?

  5. Làm cách nào để xem bất kỳ thay đổi nào (hàng mới) trong mongoDB?