1、查询符合条件的所有文档
db.mongoTest.find({name:'jay'})
find的第一个参数为一个对象,如果为空,则查询该集合下的全部文档。
2、查询符合条件的文档,并只返回某个键。
db.mongoTest.find({name:'jay'},{fav:1})
find的第二个参数接受一个对象,用来返回的内容。如果键值为0,则返回除该键以外的文档数据。否则仅返回该键值以及_id
。
默认情况下会返回_id
。所以如果不想显示_id
则:
db.mongoTest.find({name:'jay'},{fav:1,_id:0})
3、根据比较操作符来过滤查询的内容。
$lt (less-than) <
$lte (less-than && equal) <=
$gt (greater-than) >
$gte (greater-than && equal) >=
$ne (not-equal) !=
db.mongoTest.find({age:{$gte:19}})
4、根据一个键的多个值作为查询条件查询
如找到年龄为35,25,40的文档
使用操作符$in
db.mongoTest.find({age:{$in:[35,25,40]}})
$in
可以查询一个键的多个值。
使用操作符$nin
返回的值和$in
相反。
5、根据多个键的一个值作为查询条件查询
找到年龄为35,或者名字fang的人
使用操作符$or
db.mongoTest.find({$or:[{age:35},{name:'fang'}]})
注意$or
的位置。
6、根据多个键的多个值作为查询条件查询
找到年龄为35、40,或者名字为fang的人
将$or
和$in
结合使用。
db.mongoTest.find({$or:[{age:{$in:[35,40]}},{name:'fang'}]})
需要指出的是:虽然都是以$
开头,但是条件和修改器是不同的。在一条键中,条件可以有很多,但是修改器只能有一条。也就是说你不能同时操作同一个键两次。实际上语法上好像也不能这么写。
7、特定数据类型查询
找到fav为null的人
db.mongoTest.find({fav:null})
实际上这个是有歧义的,因为上面这个查询会把不存在fav键的文档也查询出来。
如果需要把不存在fav键的文档过滤掉。可以这样做:
db.mongoTest.find({fav:{$in:[null],$exists:true}})
8、使用多个元素了来匹配数组进行查询
找到fav里含有milk和music的人
使用$all
db.mongoTest.find({fav:{$all:['milk','music']}})
$all
可以用多个元素来匹配一个数组。把同时符合这些条件的文档查询出来。
如果只有一个元素,则不需要中括号。 得到的结果顺序是按照元素的排序的,也就是先会得到喜欢milk的人,再得到喜欢music的人。
9、匹配某个规定长度的数组进行查询
找到fav的长度为4的人
使用$size
db.mongoTest.find({fav:{$size:4}})
$size
只接受正非负正数。
10、从得到的数据里面显示某的数组的某些数据,而不是全部。
找到jay,但显示他的前两个fav。
使用$slice
db.mongoTest.find({name:'jay'},{fav:{$slice:2}})
$slice
接受一个数字或者一个长度为2的数组作为值。当值为正数n时,则指定的键只显示n个值。当值为负数时,则指定的键从尾部算起,仅显示n个值。当值为数组[n,m]
时,指定键仅指定从n到m之间的内容。
11、查询内嵌文档
根据nightSong,找到所有喜欢这首歌的文档,其中“喜欢的歌”是内嵌文档,整个文档结构如下
{
"_id" : ObjectId("5a9f599499f589d3f03d4f1a"),
"name" : "jay",
"age" : 30.8,
"fav" : [
"food"
],
"favSong" : [
{
"name" : "nightSong",
"date" : "2010"
},
{
"name" : "daySong",
"date" : "2016"
}
]
}
使用$elemMatch
db.mongoTest.find({favSong:{$elemMatch:{name:'nightSong'}}})
$elemMatch
部分元素匹配。只要有这一部分的元素的文档都会被查询。