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

MongoDB c # truy xuất tất cả các phần tử phù hợp trong một mảng trong tài liệu bằng trình tạo Định nghĩa

Câu hỏi không mô tả đầy đủ trường hợp sử dụng vì vậy tôi đã đưa ra một số tùy chọn tiềm năng để bạn khám phá dựa trên một số giả định, cụ thể là chúng phụ thuộc vào LINQ có sẵn và nhắm mục tiêu một tài liệu duy nhất tại một thời điểm ( và rằng bạn có thể không muốn nhiều mã hơn mức bạn thực sự cần):

1) Một biến thể về những gì bạn có. Sử dụng find tiêu chuẩn với phép chiếu và biểu thức LINQ.

var projection = Builders<ShapeDocument>.Projection
    .Expression(x => x.fooArray.Where(y => y.plot == "circle"));

var items1 = collection
    .Find(x => x.user == "Jone Doe")
    .Project(projection)
    .ToList();

2) Sử dụng đường dẫn tổng hợp (bạn có thể sử dụng cùng một phép chiếu như trên)

var pipeline = collection
    .Aggregate()
    .Match(x => x.user == "Jone Doe")
    .Project(i => new
            {
                x = i.fooArray.Where(x => x.plot == "circle")
            });

var items2 = pipeline.SingleOrDefault();

3) Kéo tài liệu trở lại với tất cả các phần tử mảng sau đó lọc cục bộ bằng LINQ. Về mặt tích cực, đây là một lượng nhỏ mã có thể đọc được, tuy nhiên, nó đưa toàn bộ tài liệu trở lại trước khi lọc. Tùy thuộc vào cách sử dụng chính xác của bạn, điều này có thể được chấp nhận.

var items3 = collection.AsQueryable()
    .SingleOrDefault(x => x.user == "Jone Doe")
    .fooArray.Where(x => x.plot == "circle");

Nếu LINQ thực sự không phải là một tùy chọn thì có một ví dụ tại đây điều đó cho thấy cách bạn có thể chuyển đổi phép chiếu không phải LINQ của chúng tôi. Hoàn toàn chưa được kiểm tra nhưng sẽ là một cái gì đó dọc theo dòng:

var filter = new BsonDocument {
 {"input", "$items"},
 {"as", "item" },
 {"cond", new BsonDocument {
     // Fill in the condition values
     { "", new BsonArray { "", xxx } } }
   }
 };

var project = new BsonDocument {
 { "items", new BsonDocument { { "$filter", filter} } }
};

var pipeline = collection.Aggregate().Project(project);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB có thể sử dụng một chỉ mục khi kiểm tra sự tồn tại của một trường có toán tử $ tồn tại không?

  2. Xây dựng mongo-cxx-driver bằng CMake ExternalProject_Add

  3. Chèn số lượng lớn Pymongo

  4. Làm cách nào để lấy _id của tài liệu được chèn một cách khéo léo sau khi chèn bằng csharp mongo?

  5. Đường dẫn tổng hợp MongoDB chậm sau bước đối sánh đầu tiên