绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
MongoDB系列 | 数据查询(二)
2020-05-22 10:43:00

1:查询语句

1.1 find() 语句

启动 MongoDB 服务,因为 MongoDB 并不随系统一起启动,可能以下命令运行后会等一小段的时间才会启动完毕。

sudo service mongodb start

进入 MongoDB 命令行操作界面,在命令行中敲 exit 可以退出。

mongo

find() 用法:db.COLLECTION_NAME.find()

> use post
> db.post.insert([
{
   title: 'MongoDB Overview',
   description: 'MongoDB is no sql database',
   by: 'shiyanlou',
   url: 'http://www.shiyanlou.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   title: 'NoSQL Database',
   description: "NoSQL database doesn't have tables",
   by: 'shiyanlou',
   url: 'http://www.shiyanlou.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 20,
   comments: [
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2013,11,10,2,35),
         like: 0
      }
   ]
}
])

查询数据,不加任何参数默认返回所有数据记录:

> db.post.find()

这条语句会返回 post 集合中的所有文档,实际应用中不常见,因为这样会导致大量的数据传输,造成服务器响应迟缓甚至失去响应。

1.2 pretty() 语句

pretty() 可以使查询输出的结果更美观。

> db.post.find().pretty()

例如:

> db.users.find()
{ "_id" : ObjectId("5c35657e6ee1e0307e215fc8"), "name" : "shiyanlou", "age" : "21" }

> db.users.find().pretty()
{
    "_id" : ObjectId("5c35657e6ee1e0307e215fc8"),
    "name" : "shiyanlou",
    "age" : "21"
}

如果你想让 mongo shell 始终以 pretty 的方式显示返回数据,可以通过下面的指令实现:

echo "DBQuery.prototype._prettyShell = true" >> ~/.mongorc.js

这样就把默认的显示方式设置为 pretty 了。

> db.users.find()
{
    "_id" : ObjectId("5c35657e6ee1e0307e215fc8"),
    "name" : "bage",
    "age" : "21"
}


2:MongoDB中的AND

MongoDB 不需要类似于其他数据库的 AND 运算符,当 find() 中传入多个键值对时,MongoDB 就会将其作为 AND 查询处理。

用法:db.mycol.find({ key1: value1, key2: value2 }).pretty()

> db.post.find({"by":"shiyanlou","to": "chenshi"}).pretty()

如上语句就可以查找出 by 字段为 'shiyanlou',to 字段为 'chenshi' 的所有记录,意思是找出系统中由 shiyanlou 发送给 chenshi 的所有邮件。

它对应的关系型 SQL 语句为:

SELECT * FROM post WHERE by = 'shiyanlou' AND to = 'chensh


3:MongoDB中的OR

3.1 OR

MongoDB 中,OR 查询语句以 $or 作为关键词,用法如下:

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

操作示例:

> db.post.find({
    $or:[
        {"by":"shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
}).pretty()

它对应的关系型 SQL 语句为:

SELECT * FROM post WHERE by = 'shiyanlou' OR title = 'Mon


4:同时使用AND和OR

操作范例:

> db.post.find({
    "likes": {$gt:10},
    $or: [
        {"by": "shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
}).pretty()

{$gt:10} 表示大于 10,另外,$lt 表示小于、$gte 表示大于等于、$lte 表示小于等于、$ne 表示不等于。

如果这样的符号记起来稍微有点麻烦,可以根据它们的全写配合记忆:

  • gt:大于 greater than
  • lt:小于 less than
  • gte:大于或等于 greater than equal
  • lte:小于或等于 less than equal


文字来源:公众号《zatko说运维》



分享好友

分享这个小栈给你的朋友们,一起进步吧。

MongoDB资料专区
创建时间:2020-05-08 13:54:47
MongoDB是一个介于关系数据库和非关系数据库之间的产品。MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~