MongoDB 查询和投影运算符
MongoDB查询运算符包括比较、逻辑、元素、评估、地理空间、数组、位运算和注释运算符。
MongoDB比较运算符
$eq
$eq
指定了等于条件。匹配字段值等于指定值的文档。
语法:
{ <field> : { $eq: <value> } }
示例:
db.books.find({ price: { $eq: 300 } })
以上示例查询books集合,选择所有price字段值等于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
运算符选择字段值与指定值不相等的文档。
语法:
{ <field>: { $ne: <value> } }
示例:
db.books.find({"price": {"$ne": 500}})
$nin
$nin
操作符选择字段值不在指定数组中或不存在的文档。
语法:
{"field": {"$nin": ["", "", ....]}}
示例:
db.books.find({"price": {"$nin": [50, 150, 200]}})
MongoDB逻辑运算符
$and
$and
操作符在一个数组上执行逻辑AND操作。数组应为一个或多个表达式,并选择满足数组中所有表达式的文档。
语法:
{"$and": [{""}, {""}, ....]}
示例:
db.books.find ( { and: [ { price: {ne: 500 } }, { price: { $exists: true } } ] } )
$not
$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: [ { <exp_1> }, { <exp_2> }, ... , { <exp_n> } ] }
示例:
db.books.find({or: [{quantity: {lt: 200}}, {price: 500}]})
MongoDB元素运算符
$exists
$exists
运算符匹配包含字段的文档,当布尔值为true时。它也匹配字段值为null的文档。
语法:
{ 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计算运算符
$expr
expr运算符允许在查询语言中使用聚合表达式。
语法:
{ $expr: { <expression> } }
示例:
db.store.find( { expr: {gt: [ "$product" , "price" ] } } )
$jsonSchema
它匹配满足指定JSON模式的文档。
语法:
{ $jsonSchema: <JSON schema object> }
$mod
mod操作符选择字段被除数除出的值具有指定余数的文档。
语法:
{ field: { $mod: [ divisor, remainder ] } }
示例:
db.books.find ( { qty: { $mod: [ 200, 0] } } )
$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
它只选择地理空间数据与给定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"或"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
它选择字段值是包含所有指定元素的数组的文档。
语法:
{ <field>: { $all: [ <value1> , <value2> ... ] } }
示例:
db.books.find( { tags: { $all: [ "Java", "MongoDB", "RDBMS" ] } } )
$elemMatch
这个操作符关联包含至少一个与所有给定查询条件匹配的数组字段的文档。
语法:
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
示例:
db.books.find(
{ results: { elemMatch: {gte: 500, $lt: 400 } } }
)
$size
它选择具有由参数指定的元素数量的任何数组。
语法:
db.collection.find( { field: { $size: 2 } } );
MongoDB位运算符
$bitsAllClear
它匹配在给定的查询中所有位位置都在字段中清除的文档。
语法:
{ <field>: { $bitsAllClear: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAllClear: [ 1, 5 ] } } )
$bitsAllSet
bitallset操作符匹配在字段中设置了查询指定的所有位位置的文档。
语法:
{ <field>: { $bitsAllSet: <numeric bitmask> } }
示例:
db.inventory.find( { a: { $bitsAllClear: [ 1, 5 ] } } )
$bitsAnyClear
bitAnyClear操作符匹配在字段中任何位位置由查询指定的位都为清零的文档。
语法:
{ <field>: { $bitsAnyClear: <数值位掩码> } }
示例:
db.inventory.find( { a: { $bitsAnyClear: [ 5, 10 ] } } )
$bitsAnySet
它匹配字段中查询中指定的任何位位置被设置的文档。
语法:
{ <field>: { $bitsAnySet: <数值位掩码> } }
示例:
db.inventory.find( { a: { $bitsAnySet: [ 1, 5 ] } } )
MongoDB注释运算符
$comment
$comment
运算符将注释与接受查询断言的任何表达式关联起来。
语法:
db.inventory.find( { <query>, $comment: <comment> } )
示例:
db.inventory.find(
{
x: { mod: [ 1, 0 ] },comment: "Find Odd values."
}
)
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: <metaDataKeyword> }
示例:
db.books.find(
<query>,
{ score: { $meta: "textScore" } }
)
$slice
它控制查询返回的数组中的值的数量。
语法:
db.books.find( { field: value }, { array: {$slice: count } } );
示例:
db.books.find( {}, { comments: { $slice: [ 200, 100 ] } } )