mongodb的查询

find

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 部分元素匹配。只要有这一部分的元素的文档都会被查询。

你可能感兴趣的:(mongodb的查询)