MongoDB查询文档

MongoDB 查询文档

MongoDB 查询文档使用 find() 方法。

find() 方法以非结构化的方式来显示所有文档。

语法

MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)
  • query:可选,使用查询操作符指定查询条件
  • projection:可选,使用投影操作符指定返回的字段。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

> db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

实例

首先插入一组集合数据

> db.col.insert({title: 'MongoDB查询文档', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'APP开发技术博客',
    url: 'http://www.appblog.cn',
    tags: ['MongoDB', 'database', 'NoSQL'],
    likes: 100
})

以下实例我们查询集合 col 中的数据:

> db.col.find().pretty()
{
    "_id" : ObjectId("5aec50955c9f75852ecd9598"),
    "title" : "MongoDB查询文档",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "APP开发技术博客",
    "url" : "http://www.appblog.cn",
    "tags" : [
        "MongoDB",
        "database",
        "NoSQL"
    ],
    "likes" : 100
}

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

MongoDB 与 RDBMS Where 语句比较

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作 格式 范例 RDBMS中的类似语句
等于 {:} db.col.find({"by":"APP开发技术博客"}).pretty() where by = 'APP开发技术博客'
小于 {:{$lt:}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {:{$lte:}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {:{$gt:}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {:{$gte:}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {:{$ne:}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

MongoDB AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

> db.col.find({key1:value1, key2:value2}).pretty()

实例

以下实例通过 by 和 title 键组合查询

> db.col.find({"by":"APP开发技术博客", "title":"MongoDB查询文档"}).pretty()
{
    "_id" : ObjectId("5aec50955c9f75852ecd9598"),
    "title" : "MongoDB查询文档",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "APP开发技术博客",
    "url" : "http://www.appblog.cn",
    "tags" : [
        "MongoDB",
        "database",
        "NoSQL"
    ],
    "likes" : 100
}

以上实例中类似于 WHERE 语句:WHERE by='APP开发技术博客' AND title='MongoDB查询文档'

MongoDB OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

> db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

实例

以下实例中,我们演示查询键 by 值为 APP开发技术博客 或键 title 值为 MongoDB查询文档 的文档。

> db.col.find({$or:[{"by":"APP开发技术博客"}, {"title": "MongoDB查询文档"}]}).pretty()
{
    "_id" : ObjectId("5aec50955c9f75852ecd9598"),
    "title" : "MongoDB查询文档",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "APP开发技术博客",
    "url" : "http://www.appblog.cn",
    "tags" : [
        "MongoDB",
        "database",
        "NoSQL"
    ],
    "likes" : 100
}

AND 和 OR 联合使用

以下实例演示 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes > 50 AND (by = 'APP开发技术博客' OR title = 'MongoDB查询文档')'

> db.col.find({"likes": {$gt:50}, $or: [{"by": "APP开发技术博客"}, {"title": "MongoDB查询文档"}]}).pretty()
{
    "_id" : ObjectId("5aec50955c9f75852ecd9598"),
    "title" : "MongoDB查询文档",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "APP开发技术博客",
    "url" : "http://www.appblog.cn",
    "tags" : [
        "MongoDB",
        "database",
        "NoSQL"
    ],
    "likes" : 100
}

补充一下 projection 参数的使用方法

db.collection.find(query, projection)

若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式

db.collection.find(query, {title: 1, by: 1})  // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 0, by: 0})  // exclusion模式 指定不返回的键,返回其他键

_id 键默认返回,需要主动指定 _id:0 才会隐藏

两种模式不可混用(因为这样的话无法推断其他键是否应返回)

db.collection.find(query, {title: 1, by: 0})  // 错误

只能全1或全0,除了在inclusion模式时可以指定 _id 为 0

db.collection.find(query, {_id:0, title: 1, by: 1})  // 正确

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/12/mongodb-query-document/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
MongoDB查询文档
MongoDB 查询文档 MongoDB 查询文档使用 find() 方法。 find() 方法以非结构化的方式来显示所有文档。 语法 MongoDB 查询数据的语法格式如下: db.collection……
<<上一篇
下一篇>>
文章目录
关闭
目 录