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
}
...
posted @ 2019-08-01 10:51  吴吃辣  阅读(388)  评论(0编辑  收藏  举报