Mongodb条件查询
下一篇: Mongodb条件操作符
MongoDB 与 RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 格式 等于 {<key>:<value>} 小于 {<key>:{$lt:<value>}} 小于或等于 {<key>:{$lte:<value>}} 大于 {<key>:{$gt:<value>}} 大于或等于 {<key>:{$gte:<value>}} 不等于 {<key>:{$ne:<value>}}
上面的实例在RDBMS中的分别对应的语句如下:
db.col.find({"name":"psz"}) 等价于 where name = 'psz'
db.col.find({"likes":{$lt:50}}) 等价于 where likes < 50
db.col.find({"likes":{$lte:50}}) 等价于 where likes <= 50
db.col.find({"likes":{$gt:50}}) 等价于 where likes > 50
db.col.find({"likes":{$gte:50}}) 等价于 where likes >= 50
db.col.find({"likes":{$ne:50}}) 等价于where likes != 50
下面的示例就是说明如何执行一个类似 SQL 的查询, 并演示了怎么在 MongoDB 里实现。 这是在 MongoDB shell 里查询, 当然你也可以用其他的应用程序驱动或者语言来实现:
> db.test.find({name:"psz"}).forEach(printjson); {"_id" : ObjectId("4c2209f9f3924d31102bd84a"),"name" : "psz"}
MongoDB AND 条件
查询条件是 { a:A, b:B, … } 类似 “ where a==A and b==B and …”。
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。
语法格式如下:
>db.col.find({key1:value1, key2:value2})
再举个例子,比如sql中:SELECT * FROM things WHERE x=4 and j!=0,那么在Mongodb中这样输出:
> db.things.find({x:4,j:{$ne:0}}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
上面显示的是所有的元素, 当然我们也可以返回特定的元素, 类似于返回表里某字段的值,只需要在 find({x:4}) 里指定元素的名字,如:
#类似sql:SELECT j FROM things WHERE x=4 and j != 0 > db.things.find({x:4,j:{$ne:0}}, {j:true}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "j" : 3 }
MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } )
实例:
> db.things.find({$or:[{"x":4},{"x":5}]}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 } { "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 5, "j" : 3 }
findOne()语法语法
为了方便考虑, MongoDB shell 避免游标可能带来的开销, 提供一个 findOne() 函数. 这个函数和 find() 函数一样, 不过它返回的是游标里第一条数据, 或者返回 null,即空数据。
作为一个例子, name=”mongo” 可以用很多方法来实现, 可以用 next() 来循环游标或者当做数组返回第一个元素。但是用 findOne() 方法则更简单和高效:
> printjson(db.things.findOne({name:"mongo"})); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
通过通过 limit 限制结果集数量
如果需要限制结果集的长度, 那么可以调用 limit 方法。
这是强烈推荐解决性能问题的方法, 就是通过限制条数来减少网络传输, 例如:
> db.things.find().limit(3); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 } { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
下一篇: Mongodb条件操作符