Rate this post

MongoDB, một cơ sở dữ liệu NoSQL hàng đầu, được thiết kế để xử lý lượng lớn dữ liệu cấu trúc và phi cấu trúc một cách linh hoạt và hiệu quả. Với cơ chế lưu trữ dữ liệu dưới dạng tài liệu JSON-like, MongoDB cho phép các nhà phát triển xây dựng các ứng dụng có khả năng mở rộng cao và dễ dàng thích ứng với yêu cầu thay đổi của dữ liệu. Trong bối cảnh quản lý dữ liệu ngày càng phức tạp, MongoDB đem lại giải pháp linh hoạt, mạnh mẽ cho việc lưu trữ và truy xuất dữ liệu, đặc biệt phù hợp với các ứng dụng web, di động và IoT.

Toán tử truy vấn MongoDB bao gồm các toán tử so sánh, lôgic, phần tử, đánh giá, không gian địa lý, mảng, bitwise và nhận xét.

Trong việc truy vấn dữ liệu từ MongoDB, toán tử Query và Projection đóng vai trò quan trọng, cho phép tinh chỉnh và tối ưu hóa các truy vấn để lấy chính xác những dữ liệu cần thiết. Toán tử Query giúp xác định điều kiện lọc để tìm kiếm tài liệu, trong khi Projection cho phép chọn lựa thông tin cụ thể từ các tài liệu đó, giúp giảm bớt lượng dữ liệu truyền qua mạng và tăng hiệu suất xử lý. Sự kết hợp giữa hai toán tử này trong MongoDB không chỉ cung cấp khả năng truy vấn dữ liệu mạnh mẽ mà còn đảm bảo dữ liệu được trả về một cách hiệu quả, chính xác, phù hợp với nhu cầu cụ thể của ứng dụng, từ đó giúp các nhà phát triển tạo ra các ứng dụng linh hoạt và mạnh mẽ.

Toán tử so sánh MongoDB

  1. $ eq

$ Eq chỉ định điều kiện bằng nhau. Nó khớp với các tài liệu trong đó giá trị của một trường bằng giá trị được chỉ định.

Cú pháp:

{ <field> : { $eq: <value> } }  

Ví dụ:

db.books.find ({price: {$ eq: 300}})

Ví dụ trên truy vấn bộ sưu tập sách để chọn tất cả các tài liệu có giá trị của giá được nộp bằng 300.

  1. $ gt

$ Gt chọn một tài liệu có giá trị của trường lớn hơn giá trị được chỉ định.

Cú pháp:

{ field: { $gt: value } }  

Ví dụ:

db.books.find ( { price: { $gt: 200 } } )  
  1. $ gte

$ Gte chọn các tài liệu có giá trị trường lớn hơn hoặc bằng một giá trị được chỉ định.

Cú pháp:

{ field: { $gte: value } }  

Ví dụ:

db.books.find ( { price: { $gte: 250 } } )   
  1. $ in

Toán tử $ in chọn các tài liệu trong đó giá trị của một trường bằng bất kỳ giá trị nào trong mảng được chỉ định.

Cú pháp:

{ filed: { $in: [ <value1>, <value2>, ……] } }  

Ví dụ:

db.books.find( { price: { $in: [100, 200] } } )  
  1. $ lt

Toán tử $ lt chọn các tài liệu có giá trị của trường nhỏ hơn giá trị được chỉ định.

Cú pháp:

{ field: { $lt: value } } 

Ví dụ:

db.books.find ( { price: { $lt: 20 } } )  
  1. $ lte

Toán tử $ lte chọn các tài liệu có giá trị trường nhỏ hơn hoặc bằng một giá trị được chỉ định.

Cú pháp:

{ field: { $lte: value } }  

Ví dụ:

db.books.find ({price: {$ lte: 250}})
  1. $ ne

Toán tử $ ne chọn tài liệu mà giá trị trường không bằng giá trị đã chỉ định.

Cú pháp:

{<field>: {$ ne: <value>}}

Ví dụ:

db.books.find ({price: {$ ne: 500}})
  1. $ nin

Toán tử $ nin chọn tài liệu mà giá trị trường không nằm trong mảng được chỉ định hoặc không tồn tại.

Cú pháp:

{ field : { $nin: [ <value1>, <value2>, .... ] } }  

Ví dụ:

db.books.find ({price: {$ nin: [50, 150, 200]}})

Toán tử logic MongoDB

  1. $ and

Toán tử $ và hoạt động như một phép toán hợp lý AND trên một mảng. Mảng phải có một hoặc nhiều biểu thức và chọn các tài liệu thỏa mãn tất cả các biểu thức trong mảng.

Cú pháp:

{$ and: [{<exp1>}, {<exp2>}, ....]}

Ví dụ:

db.books.find ({$ và: [{price: {$ ne: 500}}, {price: {$ being: true}}]})
  1. $ not

Toán tử $ not hoạt động như một KHÔNG logic trên biểu thức được chỉ định và chọn các tài liệu không liên quan đến biểu thức.

Cú pháp:

{ field: { $not: { <operator-expression> } } }  

Ví dụ:

db.books.find ({price: {$ not: {$ gt: 200}}})
  1. $ nor

Toán tử $ nor hoạt động dưới dạng NOR logic trên một mảng của một hoặc nhiều biểu thức truy vấn và chọn tài liệu không thành công với tất cả biểu thức truy vấn trong mảng.

Cú pháp:

{$ nor: [{<expression1>}, {<expresion2>}, .....]}

Ví dụ:

db.books.find ({$ nor: [{price: 200}, {sale: true}]})
  1. $ or

Nó hoạt động như một phép toán HOẶC logic trên một mảng gồm hai hoặc nhiều biểu thức và chọn các tài liệu đáp ứng mong đợi ít nhất một trong các biểu thức.

Cú pháp:

{ $or: [ { <exp_1> }, { <exp_2> }, ... , { <exp_n> } ] }  

Ví dụ:

db.books.find ( { $or: [ { quantity: { $lt: 200 } }, { price: 500 } ] } )   

Toán tử phần tử MongoDB

  1. $ exists

Toán tử tồn tại khớp với các tài liệu chứa trường khi Boolean là true. Nó cũng khớp với tài liệu có giá trị trường là null.

Cú pháp:

{field: {$ being: <boolean>}}

Ví dụ:

db.books.find ({qty: {$ being: true, $ nin: [5, 15]}})
  1. $ type

Toán tử kiểu chọn tài liệu trong đó giá trị của trường là một thể hiện của kiểu BSON được chỉ định.

Cú pháp:

{ field: { $type: <BSON type> } }  

Ví dụ:

db.books.find ({"bookid": {$ type: 2}});

Toán tử đánh giá MongoDB

  1. $ expr

Toán tử expr cho phép sử dụng các biểu thức tổng hợp trong ngôn ngữ truy vấn.

Cú pháp:

{$ expr: {<expression>}}

Ví dụ:

db.store.find ({$ expr: {$ gt: ["$ product", "price"]}})
  1. $ jsonSchema

Nó khớp với các tài liệu đáp ứng Lược đồ JSON được chỉ định.

Cú pháp:

{ $jsonSchema: <JSON schema object> }  
  1. $ mod

Toán tử mod chọn tài liệu mà giá trị của một trường được chia cho một số chia có phần dư được chỉ định.

Cú pháp:

{ field: { $mod: [ divisor, remainder ] } }  

Ví dụ:

db.books.find ({qty: {$ mod: [200, 0]}})
  1. $ regex

Nó cung cấp khả năng biểu thức chính quy cho các chuỗi đối sánh mẫu trong các truy vấn. MongoDB sử dụng các biểu thức chính quy tương thích với Perl.

Cú pháp:

{<field>: / pattern / <options>}

Ví dụ:

db.books.find ({price: {$ regex: / 789 $ /}})
  1. $ text

Toán tử $ text tìm kiếm một văn bản trên nội dung của trường, được lập chỉ mục bằng chỉ mục văn bản.

Cú pháp:

{  
  $text:  
    {  
      $search: <string>,  
      $language: <string>,  
      $caseSensitive: <boolean>,  
      $diacriticSensitive: <boolean>  
    }  
}  

Ví dụ:

db.books.find ({$ text: {$ search: "Othelo"}})
  1. $ where

Toán tử “where” là để chuyển một chuỗi chứa một biểu thức JavaScript hoặc một hàm JavaScript đầy đủ vào hệ thống truy vấn.

Ví dụ:

db.books.find( { $where: function() {  
   return (hex_md5(this.name)== "9b53e667f30cd329dca1ec9e6a8")  
} } );  

Toán tử không gian địa lý MongoDB

  1. $ geoIntersects

Nó chỉ chọn những tài liệu có dữ liệu không gian địa lý giao nhau với đối tượng GeoJSON đã cho.

Cú pháp:

{  
  <location field>: {  
     $geoIntersects: {  
        $geometry: {  
           type: "<object type>" ,  
           coordinates: [ <coordinates> ]  
        }  
     }  
  }  
}  

Ví dụ:

db.places.find(  
{  
  loc: {  
    $geoIntersects: {  
       $geometry: {  
          type: "Triangle" ,  
          coordinates: [  
            [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ] ]  
          ]  
       }  
    }  
  }  
}  
  1. $ geoWithin

Toán tử geoWithin chọn tài liệu có dữ liệu không gian địa lý tồn tại hoàn toàn trong một hình dạng cụ thể.

Cú pháp:

{  
<location field>: {  
   $geoWithin: {  
      $geometry: {  
         type: <"Triangle" or "Rectangle"> ,  
         coordinates: [ <coordinates> ]  
      }  
   }  
}  
  1. $ near

Toán tử gần xác định một điểm mà tại đó truy vấn không gian địa lý trả về các tài liệu từ gần đến xa.

Cú pháp:

{  
<location field>: {  
  $near: {  
    $geometry: {  
       type: "Point" ,  
       coordinates: [ <longitude> , <latitude> ]  
    },  
    $maxDistance: <distance in meters>,  
    $minDistance: <distance in meters>  
  }  
}  

Ví dụ:

 db.places.find(  
{  
  location:  
    { $near :  
       {  
         $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] },  
         $minDistance: 1000,  
         $maxDistance: 5000  
       }  
    }  
}  
  1. $ nearSphere

Toán tử nearsphere chỉ định một điểm mà truy vấn không gian địa lý trả về tài liệu từ gần nhất đến xa nhất.

Cú pháp:

    {  
  $nearSphere: [ <x>, <y> ],  
  $minDistance: <distance in radians>,  
  $maxDistance: <distance in radians>  
}  

Ví dụ:

db.legacyPlaces.find(  
   { location : { $nearSphere : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }  
)  
  1. $ all

Nó chọn tài liệu mà giá trị của một trường là một mảng chứa tất cả các phần tử được chỉ định.

Cú pháp:

{<field>: {$ all: [<value1>, <value2> ...]}}

Ví dụ:

db.books.find ({tags: {$ all: ["Java", "MongoDB", "RDBMS"]}})
  1. $ elemMatch

Toán tử liên hệ các tài liệu chứa trường mảng với ít nhất một phần tử phù hợp với tất cả các tiêu chí truy vấn đã cho.

Cú pháp:

{<field>: {$ elemMatch: {<query1>, <query2>, ...}}}

Ví dụ:

db.books.find(  
   { results: { $elemMatch: { $gte: 500, $lt: 400 } } }  
)  
  1. $size

Nó chọn bất kỳ mảng nào có số phần tử được chỉ định bởi đối số.

Cú pháp:

db.collection.find( { field: { $size: 2 } } );  

Toán tử MongoDB Bitwise

  1. $ bitsAllClear

Nó khớp với các tài liệu trong đó tất cả các vị trí bit được cung cấp bởi truy vấn là nội địa rõ ràng.

Cú pháp:

{ <field>: { $bitsAllClear: <numeric bitmask> } }  

Ví dụ:

db.inventory.find ({a: {$ bitsAllClear: [1, 5]}})
  1. $ bitsAllSet

Toán tử bitallset khớp với các tài liệu trong đó tất cả các vị trí bit được cung cấp bởi truy vấn được đặt trong trường.

Cú pháp:

{ <field>: { $bitsAllSet: <numeric bitmask> } }  

Ví dụ:

db.inventory.find ({a: {$ bitsAllClear: [1, 5]}})
  1. $ bitsAnyClear

Toán tử bitAnyClear khớp với tài liệu trong đó bất kỳ vị trí bit nào được cung cấp bởi truy vấn đều rõ ràng trong trường.

Cú pháp:

{ <field>: { $bitsAnyClear: <numeric bitmask> } }  

Ví dụ:

db.inventory.find ({a: {$ bitsAnyClear: [5, 10]}})
  1. $ bitsAnySet

Nó khớp với tài liệu nơi bất kỳ vị trí bit nào được cung cấp bởi truy vấn được đặt trong trường.

Cú pháp:

{ <field>: { $bitsAnySet: <numeric bitmask> } }  

Ví dụ:

db.inventory.find ({a: {$ bitsAnySet: [1, 5]}})

Toán tử comment MongoDB

  1. $ comment

Toán tử $ comment liên kết một nhận xét với bất kỳ biểu thức nào sử dụng một vị từ truy vấn.

Cú pháp:

db.inventory.find ({<query>, $ comment: <comment>})

Ví dụ:

 db.inventory.find(  
{  
  x: { $mod: [ 1, 0 ] },  
  $comment: "Find Odd values."  
}  

Toán tử chiếu MongoDB

  1. $

Toán tử $ giới hạn nội dung của một mảng từ kết quả truy vấn để chỉ chứa phần tử đầu tiên phù hợp với tài liệu truy vấn.

Cú pháp:

db.books.find( { <array>: <value> ... },  
     { "<array>.$": 1 } )  
db.books.find( { <array.field>: <value> ...},  
     { "<array>.$": 1 } )            
  1. $ elemMatch

Nội dung của trường mảng được giới hạn bằng cách sử dụng toán tử này từ kết quả truy vấn để chỉ chứa phần tử đầu tiên phù hợp với phần tử $ elemMatch điều kiện.

Cú pháp:

db.library.find( { bookcode: "63109" },  
{ students: { $elemMatch: { roll: 102 } } } )
  1. $ meta

Toán tử meta trả về kết quả cho mỗi tài liệu phù hợp có siêu dữ liệu được liên kết với truy vấn.

Cú pháp:

{ $meta: <metaDataKeyword> }  

Ví dụ:

db.books.find(  
<query>,  
{ score: { $meta: "textScore" } }
  1. $ slice

Nó kiểm soát số lượng giá trị trong một mảng mà một truy vấn trả về.

Cú pháp:

db.books.find ({field: value}, {array: {$ slice: count}});

Ví dụ:

db.books.find ({}, {nhận xét: {$ slice: [200, 100]}})

Những lưu ý khi sử dụng toán tử trên MongoDB

Khi sử dụng toán tử Query và Projection trong MongoDB, việc áp dụng một số mẹo và thực tiễn tốt nhất có thể giúp tối ưu hóa hiệu suất và đảm bảo dữ liệu được truy vấn một cách hiệu quả. Đầu tiên, cần hết sức lưu ý để không truy vấn lấy quá nhiều dữ liệu không cần thiết. Việc sử dụng Projection một cách thông minh, chỉ định rõ ràng những trường dữ liệu cần lấy và loại trừ những trường không cần thiết, có thể giảm đáng kể kích thước dữ liệu trả về và tăng tốc độ truy vấn.

Việc sử dụng các chỉ mục (indexes) là một trong những phương pháp hiệu quả nhất để cải thiện hiệu suất truy vấn. Các chỉ mục giúp MongoDB nhanh chóng xác định và truy cập vào dữ liệu mà không cần quét toàn bộ tài liệu, giảm thiểu thời gian xử lý đáng kể. Tuy nhiên, cần sử dụng chỉ mục một cách cân nhắc, vì việc duy trì quá nhiều chỉ mục có thể làm chậm các hoạt động cập nhật và thêm mới dữ liệu.

Khi viết truy vấn, mẹo quan trọng là giữ cho truy vấn đơn giản và rõ ràng. Tránh sử dụng các điều kiện phức tạp không cần thiết và phân chia truy vấn thành các bước nhỏ hơn nếu cần. Sử dụng các công cụ và tiện ích của MongoDB để kiểm tra và tối ưu hóa truy vấn, như explain() để hiểu cách MongoDB thực thi truy vấn và tìm kiếm cách cải thiện. Cuối cùng, việc tài liệu hóa các truy vấn và chỉ mục sẽ giúp dễ dàng bảo trì và cập nhật trong tương lai, đảm bảo tính bền vững và hiệu quả của ứng dụng.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now