MongoDB 查询文档
版权所有,未经许可,禁止转载
章节
本章介绍如何从MongoDB集合中查询文档。
find() 方法
要从MongoDB集合查询数据,需要使用find()
方法。
语法
find()
方法的基本语法如下
db.COLLECTION_NAME.find()
方法显示文档时,是没有结构化的。
pretty() 方法
要以格式化的方式显示结果,可以使用pretty()
方法。
语法
db.mycollection.find().pretty()
例子
> db.qikegu.find().pretty()
{
"_id" : ObjectId("5cf7b4839ad87fde6fd23a03"),
"title" : "MongoDB 入门",
"description" : "MongoDB是开源的NoSQL数据库",
"by" : "qikegu.com",
"url" : "https://www.qikegu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 888
}
除了find()
方法之外,还有findOne()
方法,它只返回一个结果。
MongoDB查询条件与SQL Where对比
find()
方法可以传入查询条件,为便于理解,下表列出了等价的SQL Where语句。
操作 | 语法 | 例子 | 等价于 |
---|---|---|---|
等于 | {<key>:<value>} | db.mycol.find({"by":"qikegu.com"}).pretty() | where by = 'qikegu.com' |
小于 | {<key>:{$lt:<value>}} | db.mycol.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于等于 | {<key>:{$lte:<value>}} | db.mycol.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.mycol.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于等于 | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
AND
语法
在find()
方法中,查询条件可以使用AND
,下面是AND
的基本语法
> db.qikegu.find(
{
$and: [
{key1: value1}, {key2:value2}
]
}
).pretty()
$and
也可以省略,直接传入键值对,以逗号分隔,格式如下:
> db.qikegu.find(
{
key1: value1,
key2:value2
}
).pretty()
例子
下面的例子将显示由'qikegu.com'编写并且标题是'MongoDB 入门'的所有教程'。
> db.qikegu.find({$and:[{"by": "qikegu.com"},{"title": "MongoDB 入门"}]}).pretty()
{
"_id" : ObjectId("5cf7b4839ad87fde6fd23a03"),
"title" : "MongoDB 入门",
"description" : "MongoDB是开源的NoSQL数据库",
"by" : "qikegu.com",
"url" : "https://www.qikegu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 888
}
对于上面的示例,等效where子句是where by = 'qikegu.com'和' title = 'MongoDB 入门'
。可以在find
子句中传递任意数量的键值对。
OR
语法
在find()
方法中,查询条件可以使用OR
,下面是OR
的基本语法
> db.qikegu.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例子
下面的例子将显示由“qikegu.com”编写或标题为“MongoDB 入门”的教程。
> db.qikegu.find({$or:[{"by": "qikegu.com"},{"title": "MongoDB 入门"}]}).pretty()
{
"_id" : ObjectId("5cf7b4839ad87fde6fd23a03"),
"title" : "MongoDB 入门",
"description" : "MongoDB是开源的NoSQL数据库",
"by" : "qikegu.com",
"url" : "https://www.qikegu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 888
}
...
AND, OR 一起使用
例子
下面的示例将显示符合以下条件的文档:点赞大于10,并且要么标题是“MongoDB 入门”,要么由"qikegu.com"编写。等效SQL where子句是where like >10 AND (by = 'qikegu.com'或title = 'MongoDB 入门')
> db.qikegu.find({"likes": {$gt:10}, $or: [{"by": "qikegu.com"}, {"title": "MongoDB 入门"}]}).pretty()
{
"_id" : ObjectId("5cf7b4839ad87fde6fd23a03"),
"title" : "MongoDB 入门",
"description" : "MongoDB是开源的NoSQL数据库",
"by" : "qikegu.com",
"url" : "https://www.qikegu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 888
}
...