MongoDB查询
实验过程
1.基本查询
查询一条数据
> db.Student.findOne()
{
"_id" : ObjectId("5a2495381d7f7d899ec20378"),
"name" : "Lin",
"age" : 20,
"sex" : "male"
}
多条件查询
> db.Student.find({name:"Lin",age:20})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
返回指定的文档键值对(相当于不返回其他键值对)
> db.Student.find({},{name:"Lin",age:20})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20 }
指定不返回的文档键值对(除了name以外的键值对都返回了)
> db.Student.find({},{name:0})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "age" : 20, "sex" : "male" }
2.查询条件
MongoDB提供了一组比较操作符:$lt/$lte/$gt/$gte/$ne
,依次等价于
> db.Student.find({"age":{"$gte":18, "$lte":40}})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
返回name!=Lin
db.Student.find({"name":{"$ne":"Lin"}})
in:在范围内查找
> db.Student.find({"name":{"$in":["Lin","lin1"]}})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
和SQL不同的是,MongoDB的in list中的数据可以是不同类型
> db.Student.find({"name":{"$in":["Lin",123]}})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
nin等同于SQL中的not in,同时也是$in的取反
> db.Student.find({"name":{"$in":["Lin1",123]}})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
3.null数据类型的查询
在进行值为null数据的查询时,所有值为null,以及不包含指定键的文档均会被检索出来
> db.Student.find({"x":null})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
4.正则查询
perl规则
> db.Student.find()
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
{ "_id" : ObjectId("5a24a9e61d7f7d899ec20379"), "name" : "Tom", "age" : 18, "sex" : "male" }
{ "_id" : ObjectId("5a24a9fd1d7f7d899ec2037a"), "name" : "Linda", "age" : 16, "sex" : "female" }
> db.Student.find({"name":/Lin?/i})
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
{ "_id" : ObjectId("5a24a9fd1d7f7d899ec2037a"), "name" : "Linda", "age" : 16, "sex" : "female" }
5.数组数据查询
插入数组元素,并且查询
> db.Student.insert({fruit:["apple","orange"]})
WriteResult({ "nInserted" : 1 })
> db.Student.insert({fruit:["paneapple","banana"]})
WriteResult({ "nInserted" : 1 })
> db.Student.insert({fruit:["blackpaneapple","banana"]})
WriteResult({ "nInserted" : 1 })
> db.Student.insert({fruit:["blackpaneapple","cherry"]})
WriteResult({ "nInserted" : 1 })
> db.Student.find()
{ "_id" : ObjectId("5a2495381d7f7d899ec20378"), "name" : "Lin", "age" : 20, "sex" : "male" }
{ "_id" : ObjectId("5a24a9e61d7f7d899ec20379"), "name" : "Tom", "age" : 18, "sex" : "male" }
{ "_id" : ObjectId("5a24a9fd1d7f7d899ec2037a"), "name" : "Linda", "age" : 16, "sex" : "female" }
{ "_id" : ObjectId("5a24ad401d7f7d899ec2037b"), "fruit" : [ "apple", "orange" ] }
{ "_id" : ObjectId("5a24ad521d7f7d899ec2037c"), "fruit" : [ "paneapple", "banana" ] }
{ "_id" : ObjectId("5a24ad601d7f7d899ec2037d"), "fruit" : [ "blackpaneapple", "banana" ] }
{ "_id" : ObjectId("5a24ad6b1d7f7d899ec2037e"), "fruit" : [ "blackpaneapple", "cherry" ] }
> db.Student.find({"fruit":"apple"})
{ "_id" : ObjectId("5a24ad401d7f7d899ec2037b"), "fruit" : [ "apple", "orange" ] }
检索数组中需要包含多个元素的情况,这里使用$all
> db.Student.find({"fruit": {"$all": ["orange","apple"]}})
{ "_id" : ObjectId("5a24ad401d7f7d899ec2037b"), "fruit" : [ "apple", "orange" ] }
匹配数组中指定下标元素的值
> db.Student.find({"fruit.1":"cherry"})
{ "_id" : ObjectId("5a24ad6b1d7f7d899ec2037e"), "fruit" : [ "blackpaneapple", "cherry" ] }
通过$size
获取数组的长度,但是$size不能和比较操作符联合使用
> db.Student.find({"fruit": {$size : 2}})
{ "_id" : ObjectId("5a24ad401d7f7d899ec2037b"), "fruit" : [ "apple", "orange" ] }
{ "_id" : ObjectId("5a24ad521d7f7d899ec2037c"), "fruit" : [ "paneapple", "banana" ] }
{ "_id" : ObjectId("5a24ad601d7f7d899ec2037d"), "fruit" : [ "blackpaneapple", "banana" ] }
{ "_id" : ObjectId("5a24ad6b1d7f7d899ec2037e"), "fruit" : [ "blackpaneapple", "cherry" ] }