zoukankan      html  css  js  c++  java
  • 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
    }
    ...
    
  • 相关阅读:
    我爱java系列之---【Sublime Text编辑远程Linux服务器上的文件】
    我爱java系列之---【发送请求消息的中间件—okhttp】
    Backpack
    Interleaving String
    Edit Distance
    Longest Common Subsequence
    Jump Game II
    Unique Paths II
    Climbing Stairs
    Triangle -- C3
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11281128.html
Copyright © 2011-2022 走看看