MongoDB查询语句

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})

我,曼妥思,打钱