MongoDB查询语句
基本的查询语句请参考上一篇MongoDB基本语法
1. 查询条件
MongoDB提供了一组比较操作符:$lt/$lte/$gt/$gte/$ne
,依次等价于</<=/>/>=/!=
。
下面的示例返回符合条件age >= 19 && age <= 25
db.user.find({‘age’:{$gte:19,$lte:25}})
下面的示例返回条件符合name != “haha”
db.user.find({“name”:{“$ne”:”haha”}})
$in等同于SQL中的in,下面的示例等同于SQL中的in (“haha”,”laji”)
db.user.find({“name”:{“$in”:[“haha”,”laji”]}})
$nin等同于SQL中的not in,同时也是$in的取反。
db.user.find({“name”:{“$nin”:[“haha”,”laji”]}})
$or等同于SQL中的or,$or所针对的条件被放到一个数组中,每个数组元素表示or的一个条件。下面的示例等同于name = “haha” or age = 19
db.user.find({“$or”: [{“name”:”haha”}, {“age”:19}]})
下面的示例演示了如何混合使用$or和$in。
db.user.find({“$or”: [{“name”:{“$in”:[“haha”,”laji”]}}, {“age”:19}]})
2. 正则查询
i表示忽略大小写
db.user.find({‘name’:/lala?/i})
3. 数组数据查询
数组中所有包含banana的文档都会被检索出来。
db.test.find({“fruit”:”banana”})
检索数组中需要包含多个元素的情况,这里使用$all。下面的示例中,数组中必须同时包含apple和banana,但是他们的顺序无关紧要。
db.test.find({“fruit”: {“$all”: [“banana”,”apple”]}})
下面的示例表示精确匹配,即被检索出来的文档,fruit值中的数组数据必须和查询条件完全匹配,即不能多,也不能少,顺序也必须保持一致。
db.test.find({“fruit”:[“apple”,”banana”,”peach”]})
下面的示例将匹配数组中指定下标元素的值。数组的起始下标是0。fruit[2] = ‘peach’的那一条
db.test.find({“fruit.2”:”peach”})
可以通过$size获取数组的长度,但是$size不能和比较操作符联合使用。
db.test.find({“fruit”: {$size : 3}})
如果需要检索size > n的结果,不能直接使用$size,只能是添加一个额外的键表示数据中的元素数据,在操作数据中的元素时,需要同时更新size键的值。为后面的实验构造数据。
db.test.update({}, {“$set”: {“size”:3}},false,true)
每次添加一个新元素,都要原子性的自增size一次。
test.update({},{“$push”:{“fruit”:”strawberry”},”$inc”:{“size”:1}},false,true)
通过$slice返回数组中的部分数据。”$slice”:2表示数组中的前两个元素。
db.test.find({},{“fruit”: {“$slice”:2}, “size”:0})
通过$slice返回数组中的部分数据。”$slice”:-2表示数组中的后两个元素。
db.test.find({},{“fruit”: {“$slice”:-2}, “size”:0})
$slice : [2,1],表示从第二个2元素开始取1个,如果获取数量大于2后面的元素数量,则取后面的全部数据。
db.test.find({},{“fruit”: {“$slice”:[2,1]}, “size”:0})