📜  MongoDB query和projection运算符

📅  最后修改于: 2020-11-23 00:54:04             🧑  作者: Mango

MongoDB query和projection运算符

MongoDB查询运算符包括比较,逻辑,元素,评估,地理空间,数组,按位和注释运算符。

MongoDB比较运算符

$ eq

$ eq指定相等条件。它匹配字段值等于指定值的文档。

句法:

{  : { $eq:  } }

例:

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

上面的示例查询书集以选择价格为300的所有文档。

$ gt

$ gt选择一个文档,该文档的字段值大于指定的值。

句法:

{ field: { $gt: value } }

例:

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

$ gte

$ gte选择字段值大于或等于指定值的文档。

句法:

{ field: { $gte: value } }

例:

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

$ in

$ in运算符选择文档,其中字段的值等于指定数组中的任何值。

句法:

{ filed: { $in: [ , , ……] } }

例:

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

$ lt

$ lt运算符选择字段值小于指定值的文档。

句法:

{ field: { $lt: value } }

例:

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

$ lte

$ lte运算符选择字段值小于或等于指定值的文档。

句法:

{ field: { $lte: value } }

例:

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

$ ne

$ ne运算符选择字段值不等于指定值的文档。

句法:

{ : { $ne:  } }

例:

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

$ nin

$ nin运算符选择字段值不在指定数组中或不存在的文档。

句法:

{ field : { $nin: [ , , .... ] } }

例:

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

MongoDB逻辑运算符

$和

$ and运算符对数组进行逻辑AND操作。该数组应具有一个或多个表达式,并选择满足数组中所有表达式的文档。

句法:

{ $and: [ {  }, {  }, ....]}

例:

db.books.find ( { $and: [ { price: { $ne: 500 } }, { price: { $exists: true } } ] } )

$ not

$ not运算符在指定的表达式上作为逻辑NOT起作用,并选择与该表达式无关的文档。

句法:

{ field: { $not: {  } } }

例:

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

$ nor

$ nor运算符在一个或多个查询表达式的数组上作为逻辑NOR起作用,并选择对该数组中所有查询表达式都失败的文档。

句法:

{ $nor: [ {  } , {  } , ..... ] }

例:

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

$或

它对两个或多个表达式的数组进行逻辑或运算,并选择满足至少一个表达式期望的文档。

句法:

{ $or: [ {  }, {  }, ... , {  } ] }

例:

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

MongoDB元素运算符

$存在

当布尔值为true时,exists运算符匹配包含该字段的文档。它还与字段值为空的文档匹配。

句法:

{ field: { $exists:  } }

例:

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

$类型

类型运算符选择文档,其中字段的值是指定BSON类型的实例。

句法:

{ field: { $type:  } }

例:

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

MongoDB评估运营商

$ expr

expr运算符允许在查询语言中使用聚合表达式。

句法:

{ $expr: {  } }

例:

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

$ jsonSchema

它匹配满足指定JSON模式的文档。

句法:

{ $jsonSchema:  }

$ mod

mod运算符选择文档,其中字段的值被除数除以指定的余数。

句法:

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

例:

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

$ regex

它为查询中的模式匹配字符串提供了正则表达式功能。 MongoDB使用与Perl兼容的正则表达式。

句法:

{ : /pattern/ }

例:

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

$文字

$ text运算符在字段内容上搜索文本,并用文本索引建立索引。

句法:

             {
  $text:
    {
      $search: ,
      $language: ,
      $caseSensitive: ,
      $diacriticSensitive: 
    }
}

例:

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

$ where

“ where”运算符用于将包含JavaScript表达式的字符串或完整的JavaScript函数传递给查询系统。

例:

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

MongoDB地理空间运算符

$ geoIntersects

它仅选择地理空间数据与给定的GeoJSON对象相交的那些文档。

句法:

{
  : {
     $geoIntersects: {
        $geometry: {
           type: "" ,
           coordinates: [  ]
        }
     }
  }
}


例:

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

$ geoWithin

geoWithin运算符选择具有完全存在于指定形状中的地理空间数据的文档。

句法:

              {
   : {
      $geoWithin: {
         $geometry: {
            type: <"Triangle" or "Rectangle"> ,
            coordinates: [  ]
         }
      }
   }
}

$近

Near运算符定义一个点,地理空间查询针对该点从近到远返回文档。

句法:

            {
   : {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: [  ,  ]
       },
       $maxDistance: ,
       $minDistance: 
     }
   }
}

例:

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

$ nearSphere

Nearsphere运算符指定一个点,地理空间查询针对该点从最近到最远返回文档。

句法:

            {
  $nearSphere: [ ,  ],
  $minDistance: ,
  $maxDistance: 
}

例:

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

$全部

它选择文档,其中字段的值是包含所有指定元素的数组。

句法:

{ : { $all: [  ,  ... ] } }

例:

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

$ elemMatch

运算符将包含包含至少一个与所有给定查询条件匹配的元素的数组字段的文档相关联。

句法:

{ : { $elemMatch: { , , ... } } }

例:

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

$大小

它选择具有参数指定元素编号的任何数组。

句法:

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

MongoDB按位运算符

$ bitsAllClear

它匹配文档,其中查询给出的所有位位置都在内部字段中清除。

句法:

{ : { $bitsAllClear:  } }

例:

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

$ bitsAllSet

bitallset运算符与在字段中设置了查询给出的所有位位置的文档匹配。

句法:

{ : { $bitsAllSet:  } }

例:

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

$ bitsAnyClear

bitAnyClear运算符与文档匹配,在该文档中查询给出的任何位置在字段中都清楚。

句法:

{ : { $bitsAnyClear:  } }

例:

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

$ bitsAnySet

它与在字段中设置查询给定的任何位位置的文档匹配。

句法:

{ : { $bitsAnySet:  } }

例:

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

MongoDB评论运算符

$评论

$ comment运算符将注释与采用查询谓词的任何表达式相关联。

句法:

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

例:

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

MongoDB投影运算符

$

$运算符将查询结果中数组的内容限制为仅包含与查询文档匹配的第一个元素。

句法:

     db.books.find( { :  ... },
          { ".$": 1 } )
     db.books.find( { :  ...},
          { ".$": 1 } )                

$ elemMatch

使用此运算符从查询结果中限制数组字段的内容,使其仅包含与元素$ elemMatch条件匹配的第一个元素。

句法:

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

$元

元运算符返回每个匹配文档的结果,其中与查询关联的元数据。

句法:

{ $meta:  }

例:

                db.books.find(
   ,
   { score: { $meta: "textScore" } }
)

$切片

它控制查询返回的数组中值的数量。

句法:

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

例:

db.books.find( {}, { comments: { $slice: [ 200, 100 ] } } )