Truy vấn phạm vi MongoDB

Điều này không tuyệt chút nào. MongoDB xem xét 50.000 khóa và tài liệu (về cơ bản là toàn bộ bộ sưu tập), chỉ để trả lại 4 trong số chúng. Ngoài ra, hãy lưu ý giai đoạn có tên là “SORT_KEY_GENERATOR” ở đó. Sự tồn tại của giai đoạn này có nghĩa là MongoDB không thể sử dụng chỉ mục để trình bày kết quả được sắp xếp và do đó, thay vào đó, thực hiện sắp xếp trong bộ nhớ, giới hạn ở 32 MB. Nếu truy vấn của bạn trả về một tập hợp kết quả lớn vượt quá 32 MB, thì truy vấn sẽ không thành công. Xem Sử dụng chỉ mục để sắp xếp kết quả truy vấn

Chúng tôi có thể cải thiện điều này bằng cách cấu trúc lại truy vấn của bạn (bằng cách mở gói câu lệnh $or) và tạo một vài chỉ mục để hỗ trợ cả hai điều khoản của truy vấn $or

Truy vấn được cấu trúc lại trông giống như

{$or:[
    {sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, 
    {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}
]}

và hai chỉ mục là

> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
3 và
> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
4, để đáp ứng cả hai điều khoản của truy vấn $or. Kết quả
> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
5 tôi nhận được là

> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...

Truy vấn được cấu trúc lại và hai chỉ mục có vẻ hoạt động tốt với nhau. Bây giờ MongoDB trả về 4 tài liệu và đã kiểm tra chính xác cùng một số khóa chỉ mục và tài liệu. Cũng lưu ý sự tồn tại của giai đoạn “SORT_MERGE”. Về cơ bản, đây là giai đoạn hợp nhất của sắp xếp hợp nhất, không bị ràng buộc với giới hạn 32 MB. Giai đoạn này hợp nhất hai kết quả (đã được sắp xếp) cho từng cụm từ $or. Ngoài ra, thời gian thực hiện truy vấn giảm từ 118 ms xuống chỉ còn 1 ms

Xin lưu ý rằng phân tích tôi đã thực hiện chủ yếu là phỏng đoán có học vì tôi không biết bản chất chính xác của dữ liệu của bạn. Để tối ưu hóa trường hợp sử dụng của bạn, tôi khuyến khích bạn hiểu đầy đủ kết quả

> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
5. https. // tài liệu. mongodb. com/v3. 2/tham khảo/giải thích-kết quả/

Hôm nay, trong bài viết này sẽ xem cách viết truy vấn Phạm vi ngày MongoDB để lấy bản ghi dựa trên dấu thời gian hoặc phạm vi ngày. Chúng ta sẽ xem các ví dụ về truy vấn ngày MongoDB bao gồm ngày MongoDB lớn hơn hoặc nhỏ hơn thời gian hoặc ngày, v.v.

Chúng tôi sẽ đề cập đến các khía cạnh dưới đây trong bài viết hôm nay,

  • Bắt đầu
  • Truy vấn Mongo Date bằng CLI hoặc Compass UI
    • Ngày Mongo lớn hơn truy vấn
    • Ngày Mongo Ít hơn truy vấn
    • Mongo Date lớn hơn và nhỏ hơn truy vấn
  • Ví dụ – Ngày MongoDB lớn hơn >
  • Ví dụ – Truy vấn ngày MongoDB – Nhỏ hơn ngày >
  • Truy vấn MongoDB – Đối với các bản ghi lớn hơn ngày và nhỏ hơn ngày <>
  • Sự khác biệt giữa gt và gte hoặc lt và lte trong MongoDB là gì?
    • gte
    • gt
    • lte
    • trung úy
  • Truy vấn ngày MongoDB bằng C#. BỌC LƯỚI

Chúng tôi đã xem xét một cách đơn giản để thêm hoặc cập nhật một trường mới vào tài liệu trong loạt bài mẫu MongoDB trước đây của chúng tôi

Vui lòng truy cập bài viết dưới đây để hiểu những điều cơ bản về cách thêm trình điều khiển MongoDB và thực hiện các thao tác CRUD với các tình huống ví dụ,

  • Thêm/Cập nhật Trường mới cho tất cả các tài liệu bằng UpdateMany trong Bộ sưu tập MongoDB Phần I

Bắt đầu

Dưới đây là lược đồ hoặc tài liệu mẫu mà chúng tôi sẽ sử dụng cho truy vấn phạm vi ngày,

Truy vấn phạm vi MongoDB

Truy vấn Mongo Date bằng CLI hoặc Compass UI

Ở đây chúng tôi sẽ sử dụng truy vấn bên dưới để lấy tài liệu giữa hai ngày trong Bộ sưu tập MongoDB

Ngày Mongo lớn hơn truy vấn

Chỉ huy

{ : { $gt:ISODate('Date here') } }

 

Ngày Mongo Ít hơn truy vấn

Chỉ huy

{ : { $lt:ISODate('Date here') } }

Mongo Date lớn hơn và nhỏ hơn truy vấn

Chỉ huy

{   : { $gt:ISODate('Date Here'), $lt:ISODate('Date here')  }  }

Bây giờ chúng ta hãy xem một số ví dụ thực tế và các mẫu thực thi truy vấn

Ví dụ – Ngày MongoDB lớn hơn >

Dưới đây là truy vấn ngày MongoDB lớn hơn ngày

Ví dụ

db.collection.find({ DateAdded : { $gt:ISODate('2019-09-18T21:07:42.313+00:00')}})
Truy vấn phạm vi MongoDB

Ví dụ – Truy vấn ngày MongoDB – Ít hơn ngày >

Dưới đây là truy vấn Shell mongo ít hơn ngày

Mẫu truy vấn

db.collection.find({ DateAdded : { $lt:ISODate('2019-09-18T21:07:42.313+00:00')}})
Truy vấn phạm vi MongoDB

Truy vấn MongoDB – Đối với các bản ghi lớn hơn ngày và nhỏ hơn ngày

Mẫu truy vấn

db.collection.find({ DateAdded : { $gt:ISODate('2020-09-18T21:07:42.313+00:00'), $lt:ISODate('2020-09-19T21:08:42.313+00:00')}})

Ví dụ

Truy vấn sẽ xác định tất cả các bản ghi nằm giữa hai ngày được chỉ định

Truy vấn phạm vi MongoDB

Sự khác biệt giữa gt và gte hoặc lt và lte trong MongoDB là gì?

Các lệnh trên rất đơn giản và dễ hiểu. Có sự khác biệt nhỏ giữa các lệnh này

gte

________số 8

gt

gt  = greater than i.e > 

lte

> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
0

trung úy

> db.test.explain('executionStats').find({$or:[{sender:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}, {receiver:"Oscar", amount_sent:10, start: {$gte: 1467295200, $lte: 1483189200}}]}).sort({start:-1})
    ...
    "nReturned": 4,
    "executionTimeMillis": 1,
    "totalKeysExamined": 4,
    "totalDocsExamined": 4,
    ...
    "stage": "SORT_MERGE",
    ...
1

Truy vấn ngày MongoDB bằng C#. BỌC LƯỚI

Tương tự, các lệnh trên, bạn có thể thực thi bằng mã C# được giải thích dễ dàng trong bài viết dưới đây,

Vui lòng tạo bất kỳ. BỌC LƯỚI/. ứng dụng NET Core

Vui lòng thêm gói NuGet trình điều khiển MongoDB bằng trình quản lý Gói Nuget

{ : { $lt:ISODate('Date here') } }
0

Tôi sẽ giữ giao diện trình điều khiển MongoDB được sử dụng ở đây đủ đơn giản để tập trung vào cách thêm các trường mới vào tài liệu hiện có

Làm cách nào để tìm nhiều giá trị trong MongoDB?

MongoDB cung cấp hàm find() được sử dụng để tìm nhiều giá trị hoặc tài liệu từ bộ sưu tập. Phương thức find() trả về một con trỏ của tập kết quả và in tất cả các tài liệu. Để tìm nhiều giá trị, chúng ta có thể sử dụng các thao tác tổng hợp do chính MongoDB cung cấp .

Làm cách nào để tìm nạp dữ liệu giữa hai ngày trong MongoDB?

Bạn có thể sử dụng Truy vấn cho Phạm vi khi bạn muốn lấy dữ liệu giữa hai ngày. Đây là về truy vấn dữ liệu cho một loạt các giá trị.

Làm cách nào để kiểm tra ngày lớn hơn trong MongoDB?

tìm truy vấn bên trong mà chúng tôi đã chỉ định trường ngày tháng. Trường ngày đã cung cấp toán tử “lớn hơn” là $gt và toán tử $gt đã được gán với ISODate “2022-02-12”. If the ISODate is greater than this date from the document, it only displays those documents.

$gte trong MongoDB là gì?

$gte chọn tài liệu có giá trị của trường lớn hơn hoặc bằng (i. e. >= ) một giá trị xác định (e. g. giá trị. ) Đối với hầu hết các loại dữ liệu, toán tử so sánh chỉ thực hiện so sánh trên các trường có loại BSON khớp với loại của giá trị truy vấn.