MongoDB 查询和投影操作
MongoDB 查询运算符包括比较、逻辑、元素、评估、地理空间、数组、按位和注释运算符。
一、MongoDB 比较运算符
$eq
$eq 指定相等条件。它匹配字段值等于指定值的文档。
语法:
{ <field> : { $eq: <value> } }
示例:
db.books.find ( { price: { $eq: 300 } } )
上面的示例查询 books 集合以选择所有提交的价格值为 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: [ <value1>, <value2>, ……] } }
示例:
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 运算符选择字段值不等于指定值的文档。
语法:
{ <field>: { $ne: <value> } }
示例:
db.books.find ( { price: { $ne: 500 } } )
$nin
$nin 运算符选择字段值不在指定数组中或不存在的文档。
语法:
{ field : { $nin: [ <value1>, <value2>, .... ] } }
示例:
db.books.find ( { price: { $nin: [ 50, 150, 200 ] } } )
二、MongoDB 逻辑运算符
$and
$and 运算符用作数组上的逻辑 AND 操作。数组应该是一个或多个表达式,并选择满足数组中所有表达式的文档。
语法:
{ $and: [ { <exp1> }, { <exp2> }, ....]}
示例:
db.books.find ( { $and: [ { price: { $ne: 500 } }, { price: { $exists: true } } ] } )
$not
$not 运算符在指定表达式上用作逻辑非,并选择与表达式无关的文档。
语法:
{ field: { $not: { <operator-expression> } } }
示例:
db.books.find ( { price: { $not: { $gt: 200 } } } )
$nor
$nor 运算符在一个或多个查询表达式的数组上用作逻辑 NOR,并选择数组中所有查询表达式都失败的文档。
语法:
{ $nor: [ { <expression1> } , { <expresion2> } , ..... ] }
示例:
db.books.find ( { $nor: [ { price: 200 }, { sale: true } ] } )
$or
$or作为两个或多个表达式的数组上的逻辑 OR 操作,并选择满足至少一个表达式的期望的文档。
语法:
{ $or: [ { <exp_1> }, { <exp_2> }, ... , { <exp_n> } ] }
示例:
db.books.find ( { $or: [ { quantity: { $lt: 200 } }, { price: 500 } ] } )
三、MongoDB 元素运算符
$exists
当 Boolean 为 true 时,exists 运算符匹配包含该字段的文档。它还匹配字段值为空的文档。
语法:
{ field: { $exists: <boolean> } }
示例:
db.books.find ( { qty: { $exists: true, $nin: [ 5, 15 ] } } )
$type
类型运算符选择字段值是指定 BSON 类型实例的文档。
语法:
{ field: { $type: <BSON type> } }
示例:
db.books.find ( { "bookid" : { $type : 2 } } );
四、MongoDB Evaluation运算符
$expr
expr 运算符允许在查询语言中使用聚合表达式。
语法:
{ $expr: { <expression> } }
示例:
db.store.find( { $expr: {$gt: [ "$product" , "price" ] } } )
$jsonSchema
$jsonSchema匹配满足指定 JSON Schema 的文档。
语法:
{ $jsonSchema: <JSON schema object> }
$mod
mod 运算符选择字段值除以具有指定余数的除数的文档。
语法:
{ field: { $mod: [ divisor, remainder ] } }
示例:
db.books.find ( { qty: { $mod: [ 200, 0] } } )
$regex
$regex为查询中的模式匹配字符串提供正则表达式功能。MongoDB 使用与 Perl 兼容的正则表达式。
语法:
{ <field>: /pattern/<options> }
示例:
db.books.find( { price: { $regex: /789$/ } } )
$text
$text 运算符搜索字段内容上的文本,并使用文本索引进行索引。
语法:
{
$text:
{
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
}
示例:
db.books.find( { $text: { $search: "Othelo" } } )
$where
“where”运算符用于将包含 JavaScript 表达式的字符串或完整的 JavaScript 函数传递给查询系统。
示例:
db.books.find( { $where: function() {
return (hex_md5(this.name)== "9b53e667f30cd329dca1ec9e6a8")
} } );
五、MongoDB 地理位置空间 运算符
$geoIntersects
$geoIntersects只选择那些地理空间数据与给定 GeoJSON 对象相交的文档。
语法:
{
<location field>: {
$geoIntersects: {
$geometry: {
type: "<object type>" ,
coordinates: [ <coordinates> ]
}
}
}
}
示例:
db.places.find(
{
loc: {
$geoIntersects: {
$geometry: {
type: "Triangle" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ] ]
]
}
}
}
}
$geoWithin
geoWithin 运算符选择具有完全存在于指定形状内的地理空间数据的文档。
语法:
{
<location field>: {
$geoWithin: {
$geometry: {
type: <"Triangle" or "Rectangle"> ,
coordinates: [ <coordinates> ]
}
}
}
$near
$near操作符定义了一个点,地理空间查询从近到远返回文档。
语法:
{
<location field>: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ <longitude> , <latitude> ]
},
$maxDistance: <distance in meters>,
$minDistance: <distance in meters>
}
}
示例:
db.places.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
$nearSphere
$nearSphere 运算符指定地理空间查询从最近到最远返回文档的点。
语法:
{
$nearSphere: [ <x>, <y> ],
$minDistance: <distance in radians>,
$maxDistance: <distance in radians>
}
示例:
db.legacyPlaces.find(
{ location : { $nearSphere : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)
$all
$all选择字段值是包含所有指定元素的数组的文档。
语法:
{ <field>: { $all: [ <value1> , <value2> ... ] } }
示例:
db.books.find( { tags: { $all: [ "Java", "MongoDB", "RDBMS" ] } } )
$elemMatch
$elemMatch运算符将包含数组字段的文档与至少一个与所有给定查询条件匹配的元素关联起来。
语法:
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
示例:
db.books.find(
{ results: { $elemMatch: { $gte: 500, $lt: 400 } } }
)
$size
$size选择具有参数指定的元素编号的任何数组。
语法:
db.collection.find( { field: { $size: 2 } } );
六、MongoDB 位运算符
$bitsAllClear
$bitsAllClear匹配查询给出的所有位位置都是明确内场的文档。
语法:
{ <field>: { $bitsAllClear: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAllClear: [ 1, 5 ] } } )
$bitsAllSet
$bitsAllSet 运算符匹配在字段中设置了查询给出的所有位位置的文档。
语法:
{ <field>: { $bitsAllSet: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAllClear: [ 1, 5 ] } } )
$bitsAnyClear
$bitsAnyClear 操作符匹配由查询给出的任何位置位在字段中被清除的文档。
语法:
{ <field>: { $bitsAnyClear: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAnyClear: [ 5, 10 ] } } )
$bitsAnySet
$bitsAnySet 操作符匹配由查询给出的任何位置位在字段中被清除的文档。
语法:
{ <field>: { $bitsAnySet: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAnySet: [ 1, 5 ] } } )
七、MongoDB 投影运算符
$
$ 运算符将查询结果中的数组内容限制为仅包含与查询文档匹配的第一个元素。
语法:
db.books.find( { <array>: <value> ... },
{ "<array>.$": 1 } )
db.books.find( { <array.field>: <value> ...},
{ "<array>.$": 1 } )
$elemMatch
使用此运算符从查询结果中限制数组字段的内容仅包含与元素 $elemMatch 条件匹配的第一个元素。
语法:
db.library.find( { bookcode: "63109" },
{ students: { $elemMatch: { roll: 102 } } } )
$meta
$meta运算符返回元数据与查询相关联的每个匹配文档的结果。
语法:
{ $meta: <metaDataKeyword> }
示例:
db.books.find(
<query>,
{ score: { $meta: "textScore" } }
$slice
$slice控制查询返回的数组中值的数量。
语法:
db.books.find( { field: value }, { array: {$slice: count } } );
示例:
db.books.find( {}, { comments: { $slice: [ 200, 100 ] } } )
热门文章
优秀文章