没有查询条件时,可以使用
db.collection.find()
或者
db.collection.find({})
如果需要指定相等的查询条件,比如:字段type = “技术”
db.getCollection('test').find({"type": "技术"})
等效于mysql中 select * from test where type = “技术”;
MongoDB 提供了一系列用于比较的比较符,它们分别是:
其中,$eq, $gte, $lt, $lte, g t , gt, gt,ne 的语法是相同的。以 $eq 为例,其语法格式如下:
{ : { $eq: } }
示例:
db.getCollection('test').find({"type": {$eq:"技术"}})
$in 和 $nin 的语法相同,示例:
db.getCollection('test').find({"tag": {$in:["A"]}})
另外,$in 和 $nin 均支持正则表达式.
MongoDB 中的逻辑查询操作符共有 4 种,它们是:
其中,$and, $nor 和 $or 语法格式相同。
$and是隐式的,不用在查询语句中表明。
$or, $ not,$nor 均采用显式写法。
and是隐式的:
db.getCollection('test').find({"type": "技术", "num":20})
等效于mysql中select * from test where type = “技术” and num = 20;
查询type="技术"或者num=30的文档:
db.getCollection('test').find({$or:[{"type": "技术"},{ "num":30}]})
查询num不等于20也不等于30的文档:
db.getCollection('test').find({$nor:[{"num": 20},{ "num":30}]})
查询num存在且不大于20的文档:
db.getCollection('test').find({"num":{$exists:true,$not:{$gt:20}}})
MongoDB 中的元素查询操作符只有 2 种,它们是:
$exists判断字段是否存在,true为存在,false为不存在
db.getCollection('test').find({"num":{$exists:true}})
$type查询类型匹配的文档
db.getCollection('test').find({"num":{$type:"number"}})
匹配数组,表示or的关系。比如num类型是number或者string的:
db.getCollection('test').find({"num":{$type:["number","string"]}})
MongoDB 中的评估查询操作符共有 6 种,它们是:
$regex可以在查询语句中使用正则表达式。
$regex 语法格式如下:
{ : { $regex: /pattern/, $options: '' } }
{ : { $regex: 'pattern', $options: '' } }
{ : { $regex: /pattern/ } }
db.getCollection('test').find({"name":{$regex:/redis设计与实现/i}})
i表示不区分大小写。
$ where可以将包含 JavaScript 表达式的字符串或函数传递给查询系统。显然,$where 提供了更高的灵活性,但它会将 JavaScript 表达式或函数应用在集合中的每个文档上,因此它对查询速度有一定影响。
可用属性:
args, MaxKey, MinKey
支持的函数:
db.getCollection('test').find({$where : function(){
return this.num == 20
}})
MongoDB 中的数组查询操作符共有 3 个,它们是:
$ all是完全匹配,与$ and的操作相当。比如db.getCollection(‘test’).find({“tag”: {$ all:[“A”, “B”]}})等效于
db.getCollection(‘test’).find({$and :[{“tag”:“A”}, {“tag”:“B”}]})
$elemMatch操作符将匹配数组中至少有 1 个元素满足查询条件的文档。
比如查询tag数组中大于B小于E的文档:
db.getCollection('test').find({"tag":{$elemMatch:{$gt:"B", $lt:"E"}}})
$ all可以和$ elemMatch一起使用:
db.getCollection('test').find({"tag": {
$all:[
{$elemMatch:{num:20,type:"技术"}},
{$elemMatch:{num:30}}
]
}})
$size 用于匹配数组元素数符合指定大小的文档
db.getCollection('test').find({"tag":{$size:3}})
查询返回值name,type:
db.getCollection('test').find({},{"name":1,"type":1})
返回值:
{
"_id" : ObjectId("5de22784c5b99911d484e4fe"),
"name" : "redis设计与实现(第一版)",
"type" : "技术"
}
如果取反,将1改为0。
_id是默认返回的,如果不想要_id。
db.getCollection('test').find({},{"name":1,"type":1,"_id":0})
MongoDB 提供了 4 种投影操作符,它们是:
$ 的作用是投影数组中符合指定条件的第一个元素。
查询tag存在的tag第一个元素:
db.getCollection('test').find({"tag":{$exists:true}},{"tag.$":1})
返回值:
{
"_id" : ObjectId("5de33ef84fce381c011c72d3"),
"tag" : [
"C"
]
}
$elemMatch 的作用是投影数组中与 $elemMatch 指定条件匹配的第一个元素。
比如:我们文档中有数据如下:
{
"_id" : ObjectId("5de370efe492c4e276fd5d1b"),
"name" : "Tomcat架构解析",
"type" : "技术",
"desc" : "Tomcat相关介绍",
"price" : "40",
"num" : 20.0,
"tag" : [
"A",
"B",
"C"
],
"author" : [
{
"name" : "zhangsan",
"country" : "China"
},
{
"name" : "zhangsan",
"country" : "USA"
}
]
}
查询author.name = "zhangsan"的数据:
db.getCollection('test').find({"author":{$exists:true}},{"author":{$elemMatch:{"name":"zhangsan"}}})
返回值:
{
"_id" : ObjectId("5de370efe492c4e276fd5d1b"),
"author" : [
{
"name" : "zhangsan",
"country" : "China"
}
]
}
$slice 作用于数组,它的作用是限制从数组投影的元素数量。
$slice 接受多种格式的参数,包括整负值和数组。参数为正代表数组从头到尾的顺序,参数为负代表从尾到头。
db.getCollection('test').find({"author":{$exists:true}},{"author":{$slice:1}})
db.getCollection('test').find({"author":{$exists:true}},{"author":{$slice:-1}})
从第2个开始返回两个:
db.getCollection('test').find({"author":{$exists:true}},{"author":{$slice:[2,2]}})