GTE và LTE trong MongoDB là gì?

Tôi đang gặp một số khó khăn để hiểu tại sao việc sử dụng kết hợp $gte và $lte làm cho các truy vấn cực kỳ CHẬM

1. Tổng số tất cả các bản ghi trong bộ sưu tập của tôi.
lệnh. đếm
truy vấn. {}
kết quả. 767226
thời gian. 0. 00. 00. 058039

2. Đếm bằng cách sử dụng 2 chỉ mục (bộ sưu tập, ngày_xử lý) sử dụng lệnh $lt, $gt (cho đến khi biết, mọi thứ đều như mong đợi và OK)
lệnh. đếm
truy vấn. {'Ngày xử lý'. {'$lt'. ngày giờ. ngày giờ(2014, 12, 31, 0, 0), '$gt'. ngày giờ. datetime(2014, 1, 1, 0, 0)}, 'bộ sưu tập'. 'scl'}
kết quả. 20267
thời gian. 0. 00. 00. 906559

3. Đếm bằng cách sử dụng 2 chỉ mục (bộ sưu tập, ngày_xử lý) sử dụng lệnh $lt, $gte (cho đến khi biết, mọi thứ đều như mong đợi và OK)
lệnh. đếm
truy vấn. {'Ngày xử lý'. {'$lt'. ngày giờ. ngày giờ(2014, 12, 31, 0, 0), '$gte'. ngày giờ. datetime(2014, 1, 1, 0, 0)}, 'bộ sưu tập'. 'scl'}
kết quả. 20267
thời gian. 0. 00. 00. 304122

4. Đếm bằng cách sử dụng 2 chỉ mục (bộ sưu tập, ngày_xử lý) sử dụng lệnh $lte, $gt (cho đến khi biết, mọi thứ đều như mong đợi và OK)
lệnh. đếm
truy vấn. {'Ngày xử lý'. {'$gt'. ngày giờ. ngày giờ(2014, 1, 1, 0, 0), '$lte'. ngày giờ. datetime(2014, 12, 31, 0, 0)}, 'bộ sưu tập'. 'scl'}
kết quả. 20267
thời gian. 0. 00. 00. 071070

5. Đếm sử dụng 2 chỉ mục (bộ sưu tập, ngày_xử lý) sử dụng lệnh $lte, $gte (KHÔNG ĐƯỢC, Rất CHẬM)
lệnh. đếm
truy vấn. {'Ngày xử lý'. {'$gte'. ngày giờ. ngày giờ(2014, 1, 1, 0, 0), '$lte'. ngày giờ. datetime(2014, 12, 31, 0, 0)}, 'bộ sưu tập'. 'scl'}
kết quả. 20267
thời gian. 0. 00. 13. 859353

5. Giải thích về truy vấn ngắn gọn bằng cách sử dụng 2 chỉ mục (thu thập, ngày_xử lý) sử dụng $lte, $gte, thu thập tổng số ['executionStats']['nReturned'] (nhanh hơn một cách kỳ lạ so với truy vấn trước đó)
command: explain
truy vấn. {'Ngày xử lý'. {'$gte'. ngày giờ. ngày giờ(2014, 1, 1, 0, 0), '$lte'. ngày giờ. datetime(2014, 12, 31, 0, 0)}, 'bộ sưu tập'. 'scl'}
kết quả. 20267
thời gian. 0. 00. 01. 469607

Điều tương tự sẽ không xảy ra nếu tôi chỉ sử dụng bộ lọc process_date

Câu hỏi.
1. Tại sao thời gian phản hồi của ($gt, $lt), ($gte, $lt) và ($gt, $lte) lại khác (nhanh hơn) so với $gte, $lte.
2. Làm cách nào tôi có thể cải thiện chỉ mục của mình để xấp xỉ tổng sốDocsExamined với nReturned, sử dụng 2 chỉ mục (bộ sưu tập, ngày xử lý)?

mongos> db. bài viết. tìm ({'bộ sưu tập'. 'scl', 'ngày xử lý'. {'$gte'. ISODate('2014-01-01'), '$lte'. ISODate('2014-12-31')}}). giải thích('executionStats')['executionStats']
{
    "nReturned". 20267,
    "executionTimeMillis". 1669,
    "totalKeysExamined". 68043,
    "totalDocsExamined". 68043,
.

mongos> db. bài viết. getIndexes()
[
    {
        "v". 1,
        "chìa khóa". {
        "_id". 1
    },
        "tên". "_id_",
        "ns". "meta bài báo. bài viết"
    }
.
.
    {
        "v". 1,
        "chìa khóa". {
        "bộ sưu tập". 1
    },
        "tên". "bộ sưu tập_1",
        "ns". "meta bài viết. bài viết"
    },
    {
        "v". 1,
        "chìa khóa". {
        "processing_date". 1
    },
        "tên". "processing_date_1",
        "ns". "meta bài báo. bài viết"
    }
]

Cảm ơn trước

MongoDB cung cấp nhiều toán tử truy vấn so sánh. Toán tử $gte (lớn hơn bằng) là một trong những toán tử đó. Toán tử $gte được sử dụng để chọn tài liệu có giá trị của trường lớn hơn hoặc bằng (i. e. >=) giá trị đã cho. Bạn có thể sử dụng toán tử này trong phương thức update, find, like theo yêu cầu của bạn

Cú pháp của toán tử $gte

ví dụ

Trong các ví dụ sau, chúng tôi đang làm việc với

>db.employee.find()
        {
                "_id" : 1,
                "name" : "John",
                "father_name" : "Thomas",
                "department" : "Contain Writting",
                "experience" : 2,
                "mobile_no" : 9856321478,
                "gender" : "Male",
                "salary" : 22000,
                "age" : 26
        }
        {
                "_id" : 2,
                "name" : "William",
                "father_name" : "Rebort",
                "department" : "Softwre Tester",
                "experience" : 1,
                "mobile_no" : 7896541478,
                "gender" : "Male",
                "salary" : 20000,
                "age" : 21
        }
        {
                "_id" : 3,
                "name" : "Ava",
                "father_name" : "William",
                "department" : "Marketing manager",
                "experience" : 5,
                "mobile_no" : 8789654178,
                "gender" : "Female",
                "salary" : 36500,
                "age" : 25 
        }
        {
                "_id" : 4,
                "name" : "Olivia",
                "father_name" : "Noah",
                "department" : null,
                "experience" : 4,
                "mobile_no" : 9045641478,
                "gender" : "Female",
                "salary" : 30000,
                "age" : 27 
        }
        {
                "_id" : 5,
                "name" : "Elijah",
                "father_name" : "John",
                "department" : "HR",
                "experience" : 0,
                "mobile_no" : 6589741230,
                "gender" : "Male",
                "salary" : 15000,
                "age" : 20
        }
        {
                "_id" : 6,
                "name" : "John",
                "father_name" : "Liam",
                "department" : "Softwre Tester",
                "experience" : 10,
                "mobile_no" : 9014536987,
                "gender" : "Male",
                "salary" : 55000,
                "age" : 30 
        }

ví dụ 1. Sử dụng toán tử $gte

Trong ví dụ này, chúng tôi đang tìm kiếm các tài liệu có thang lương bằng hoặc lớn hơn 20000

đầu ra

{
    "_id" : 1,
    "name" : "John",
    "father_name" : "Thomas",
    "department" : "Contain Writting",
    "experience" : 2,
    "mobile_no" : 9856321478,
    "gender" : "Male",
    "salary" : 22000,
    "age" : 26
}
{
    "_id" : 2,
    "name" : "William",
    "father_name" : "Rebort",
    "department" : "Softwre Tester",
    "experience" : 1,
    "mobile_no" : 7896541478,
    "gender" : "Male",
    "salary" : 20000,
    "age" : 21
}
{
    "_id" : 3,
    "name" : "Ava",
    "father_name" : "William",
    "department" : "Marketing manager",
    "experience" : 5,
    "mobile_no" : 8789654178,
    "gender" : "Female",
    "salary" : 36500,
    "age" : 25 
}
{
    "_id" : 4,
    "name" : "Olivia",
    "father_name" : "Noah",
    "department" : null,
    "experience" : 4,
    "mobile_no" : 9045641478,
    "gender" : "Female",
    "salary" : 30000,
    "age" : 27 
}
{
    "_id" : 6,
    "name" : "John",
    "father_name" : "Liam",
    "department" : "Softwre Tester",
    "experience" : 10,
    "mobile_no" : 9014536987,
    "gender" : "Male",
    "salary" : 55000,
    "age" : 30 
}

ví dụ 2. lĩnh vực khác

Trong ví dụ này, chúng tôi đang tìm kiếm các tài liệu có tuổi lớn hơn hoặc bằng 26

đầu ra

{
    "_id" : 1,
    "name" : "John",
    "father_name" : "Thomas",
    "department" : "Contain Writting",
    "experience" : 2,
    "mobile_no" : 9856321478,
    "gender" : "Male",
    "salary" : 22000,
    "age" : 26
}
{
    "_id" : 4,
    "name" : "Olivia",
    "father_name" : "Noah",
    "department" : null,
    "experience" : 4,
    "mobile_no" : 9045641478,
    "gender" : "Female",
    "salary" : 30000,
    "age" : 27 
}
{
    "_id" : 6,
    "name" : "John",
    "father_name" : "Liam",
    "department" : "Softwre Tester",
    "experience" : 10,
    "mobile_no" : 9014536987,
    "gender" : "Male",
    "salary" : 55000,
    "age" : 30 
}

ví dụ 3. Cập nhật giá trị bằng toán tử $gte

Trong ví dụ này, chúng tôi đang cập nhật trường lương cho nhân viên có hơn hoặc bằng 3 năm kinh nghiệm làm việc

GTE và LTE là gì?

Tôi đã học được rằng lte nhỏ hơn hoặc bằng và gte lớn hơn hoặc bằng .

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.

$EQ trong MongoDB là gì?

Chỉ định điều kiện đẳng thức . Toán tử $eq khớp với các tài liệu trong đó giá trị của một trường bằng với giá trị đã chỉ định. Chỉ định toán tử $eq tương đương với việc sử dụng biểu mẫu { trường.

Các kiểu dữ liệu trong MongoDB là gì?

Sau đây là một số kiểu dữ liệu thường được sử dụng nhất trong MongoDB. .
Chuỗi. Một trong những kiểu dữ liệu cơ bản và được sử dụng rộng rãi nhất là chuỗi. .
số nguyên. Các giá trị số được lưu trữ bằng cách sử dụng kiểu dữ liệu số nguyên. .
Gấp đôi. .
Boolean. .
Mảng. .
Vật. .
Ngày tháng. .
dấu thời gian