一、MongoDB 创建数据库

语法:MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

> use Hero
switched to db Hero
> db
Hero
>

如果你想查看所有数据库,可以使用 show dbs 命令:

> show dbs
admin .000GB
config .000GB
local .000GB
>

可以看到,我们刚创建的数据库 Hero并不在数据库的列表中, 要显示它,我们需要向Hero数据库插入一些数据。

> db.Hero.insert({"h_name":"李白","h_skill":"青莲剑歌"})
WriteResult({ "nInserted" : })
> show dbs
Hero .000GB
admin .000GB
config .000GB
local .000GB
>

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

二、MongoDB 删除数据库

语法:MongoDB 删除数据库的语法格式如下:

db.dropDatabase()

删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。

以下我们删除数据库Hero为例,首先,查看所有数据库:

> show dbs
Hero 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
>

接下来我们切换到数据库Hero:

> use Hero
switched to db Hero
>

执行删除命令:

> db.dropDatabase()
{ "dropped" : "Hero", "ok" : 1 }
>

最后,我们再通过 show dbs 命令数据库是否删除成功:

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>

三、MongoDB 创建集合

MongoDB 中使用 createCollection() 方法来创建集合。语法格式:

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项

options 可以是如下参数:

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

实例在Hero数据库中创建heros集合:

> use Hero
switched to db Hero
> db.createCollection("heros")
{ "ok" : 1 }
>

如果要查看已有集合,可以使用 show collections 或 show tables 命令:

> show collections
heros
> show tables
heros
>

下面是带有几个关键参数的 createCollection() 的用法:

创建固定集合my_hero,整个集合空间大小10240KB, 文档最大个数为 10000 个。

> db.createCollection("my_hero",{capped:true,size:10240,max:10000})
{ "ok" : 1 }
>

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

> db.Hero2.insert({"name":"my_hero2"})
WriteResult({ "nInserted" : 1 })
> show collections
Hero2
my_hero
>

四、MongoDB 删除集合

MongoDB 中使用 drop() 方法来删除集合。语法格式:

db.collectionName.drop()

返回值:如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

实例:删除Hero数据库中的my_hero集合

> use Hero
switched to db Hero
> show collections
heros
my_hero
> db.my_hero.drop()
true
>

验证

> show collections
heros

五、MongoDB  插入文档

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

插入文档:MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

insert()在前面我们已经使用过了,在这里就不多介绍了,我们看一下save()

> use Hero
switched to db Hero
> show collections
heros
> db.heros2.save({x:10})
WriteResult({ "nInserted" : 1 })
> show collections
heros
heros2

六、MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

update() 方法:update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

实例:我们在集合heros中插入如下数据:

> db.heros.insert({h_name:"李白",h_skill:"青莲剑歌"})
WriteResult({ "nInserted" : 1 })

接着我们通过 update() 方法来更新技能:

> db.heros.update({"h_skill":"青莲剑歌"},{$set:{"h_skill":"神来之笔"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.heros.find()
{ "_id" : ObjectId("5d2d79034a7e85480a44bddb"), "h_name" : "李白", "h_skill" : "神来之笔" }

save() 方法:save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
<document>,
{
writeConcern: <document>
}
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

实例:以下实例中我们替换了 _id 为 5d2d79034a7e85480a44bddb 的文档数据:

> db.heros.save({"_id":ObjectId("5d2d79034a7e85480a44bddb"),"h_name":"韩信","h_skill":"国士无双"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.heros.find()
{ "_id" : ObjectId("5d2d79034a7e85480a44bddb"), "h_name" : "韩信", "h_skill" : "国士无双" }

七、MongoDB 删除文档

MongoDB remove()函数是用来移除集合中的数据。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法:remove() 方法的基本语法格式如下所示:

db.collection.remove(
<query>,
<justOne>
)

如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

实例:我们把上面修改为韩信的数据删除

> db.heros.remove({"h_name":"韩信"})
WriteResult({ "nRemoved" : 1 })
> db.heros.find() #查找已经没有数据了
>

八、MongoDB 查询文档

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

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

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

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

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

我们先往heros集合中插入两条数据作为查询对象

> db.heros.insert({h_name:"李白",h_skill:"青莲剑歌",h_attack:1000,h_blood:1500})

WriteResult({ "nInserted" : 1 })
> db.heros.insert({h_name:"韩信",h_skill:"国士无双",h_attack:800,h_blood:1200})
WriteResult({ "nInserted" : 1 })
> db.heros.find()
{ "_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"), "h_name" : "李白", "h_skill" : "青莲剑歌", "h_attack" : 1000, "h_blood" : 1500 }
{ "_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"), "h_name" : "韩信", "h_skill" : "国士无双", "h_attack" : 800, "h_blood" : 1200 }
> db.heros.find().pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
{
"_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"),
"h_name" : "韩信",
"h_skill" : "国士无双",
"h_attack" : 800,
"h_blood" : 1200
}
>

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

1、比较运算符

  • 等于,默认是等于判断,没有运算符
  • 小于$lt
  • 小于或等于$lte
  • 大于$gt
  • 大于或等于$gte
  • 不等于$ne

例如:查询攻击力大于800的

> db.heros.find({h_attack:{$gt:800}}).pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
>

查询攻击力大于等于800的

> db.heros.find({h_attack:{$gte:800}}).pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
{
"_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"),
"h_name" : "韩信",
"h_skill" : "国士无双",
"h_attack" : 800,
"h_blood" : 1200
}

2、MongoDB AND 条件

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

语法格式如下:

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

例如:查询攻击力大于800,并且血量大于1200的

> db.heros.find({"h_attack":{$gt:800},"h_blood":{$gt:1200}}).pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
>

3、MongoDB OR 条件

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

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

例如:查询攻击力大于800或者血量大于1000的

db.heros.find({$or:[{h_attack:{$gt:800}},{h_blood:{$gt:1000}}]}).pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
{
"_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"),
"h_name" : "韩信",
"h_skill" : "国士无双",
"h_attack" : 800,
"h_blood" : 1200
}
>

九、MongoDB $type 操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

首先我们在heros里面插入一条数据其h_name为一个数字

> db.heros.insert({h_name:7,h_skill:6,h_attack:1300,h_blood:900})
WriteResult({ "nInserted" : 1 })
> db.heros.find().pretty()
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
{
"_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"),
"h_name" : "韩信",
"h_skill" : "国士无双",
"h_attack" : 800,
"h_blood" : 1200
}
{
"_id" : ObjectId("5d2d9e4fa77ffd067ee1ebc8"),
"h_name" : 7,
"h_skill" : 6,
"h_attack" : 1300,
"h_blood" : 900
}

然后使用type查询h_name为字符串类型的

> db.heros.find({h_name:{$type:2}})
{ "_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"), "h_name" : "李白", "h_skill" : "青莲剑歌", "h_attack" : 1000, "h_blood" : 1500 }
{ "_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"), "h_name" : "韩信", "h_skill" : "国士无双", "h_attack" : 800, "h_blood" : 1200 }

或者:

> db.heros.find({h_name:{$type:"string"}})
{ "_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"), "h_name" : "李白", "h_skill" : "青莲剑歌", "h_attack" : 1000, "h_blood" : 1500 }
{ "_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"), "h_name" : "韩信", "h_skill" : "国士无双", "h_attack" : 800, "h_blood" : 1

十、MongoDB Limit与Skip方法

1、MongoDB Limit() 方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

语法:limit()方法基本语法如下所示:

>db.COLLECTION_NAME.find().limit(NUMBER)

例如:我们要查询heros集合里面的数据,限制每次查询两条

> db.heros.find().limit(2)
{ "_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"), "h_name" : "李白", "h_skill" : "青莲剑歌", "h_attack" : 1000, "h_blood" : 1500 }
{ "_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"), "h_name" : "韩信", "h_skill" : "国士无双", "h_attack" : 800, "h_blood" : 1200 }

如果没有指定limit()方法中的参数则显示集合中的所有数据。

2、MongoDB Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

语法:skip() 方法脚本语法格式如下:

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

例如:查询每次查询两条,跳过第一条查询

> db.heros.find().limit(2).skip(1)
{ "_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"), "h_name" : "韩信", "h_skill" : "国士无双", "h_attack" : 800, "h_blood" : 1200 }
{ "_id" : ObjectId("5d2d9e4fa77ffd067ee1ebc8"), "h_name" : 7, "h_skill" : 6, "h_attack" : 1300, "h_blood" : 900 }
>

十一、MongoDB sort() 排序方法

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

语法:sort()方法基本语法如下所示:

>db.COLLECTION_NAME.find().sort({KEY:1})

例如:对heros集合的attack字段按照升序排列

> db.heros.find().sort({"h_attack":1}).pretty()
{
"_id" : ObjectId("5d2d88a2a77ffd067ee1ebc7"),
"h_name" : "韩信",
"h_skill" : "国士无双",
"h_attack" : 800,
"h_blood" : 1200
}
{
"_id" : ObjectId("5d2d8887a77ffd067ee1ebc6"),
"h_name" : "李白",
"h_skill" : "青莲剑歌",
"h_attack" : 1000,
"h_blood" : 1500
}
{
"_id" : ObjectId("5d2d9e4fa77ffd067ee1ebc8"),
"h_name" : 7,
"h_skill" : 6,
"h_attack" : 1300,
"h_blood" : 900
}
>

十二、投影

  • 在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
  • 如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可
  • 语法:参数为字段与值,值为1表示显示,值为0不显示
db.集合名称.find({},{字段名称:1,...})
  • 对于需要显示的字段,设置为1即可,不设置即为不显示
  • 特殊:对于_id列默认是显示的,如果不显示需要明确设置为0

例1

> db.heros.find({},{h_name:1})
{ "_id" : ObjectId("5d2dfd80614bec7ca468778e"), "h_name" : "李白" }
{ "_id" : ObjectId("5d2dfd8f614bec7ca468778f"), "h_name" : "韩信" }

例2

> db.heros.find({},{_id:0,h_name:1})
{ "h_name" : "李白" }
{ "h_name" : "韩信" }

python数据库-MongoDB的基本使用(54)的更多相关文章

  1. python数据库-MongoDB的安装(53)

    一.NoSQL介绍 1.什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". NoSQL,指的是非关系型的数据库.NoSQL有时也称 ...

  2. python数据库-mongoDB的高级查询操作(55)

    一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...

  3. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  4. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  5. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  6. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  7. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  8. Python连接MongoDB数据库并执行操作

    原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...

  9. python连接mongodb数据库

    之前使用过python连接mysql数据库(用到pymysql库),公司也有使用mongodb数据库,所以就整理了一份python连接mongodb数据库的代码出来,以供记录和分享. 首先我们要用到 ...

随机推荐

  1. C# WebApi使用AttributeRoutes特性路由

    1.在创建WebApi中默认的路由规则,只能满足一般简单的RESTful风格,如 api/Products/{id}. 但是在实际运用中很难严格满足RESTful要求的WebApi.因此需要使用高版本 ...

  2. ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区 1 软件安装 1.1 安装前准备 请确认已经收到来自Esri中国( ...

  3. C# 实现系统关机、注销、重启、休眠、挂起

    原文:C# 实现系统关机.注销.重启.休眠.挂起 核心代码如下: using System; using System.Text; using System.Diagnostics; using Sy ...

  4. 如何在 Linux 中添加一块大于 2TB 的新磁盘?

    你有没有试过使用 fdisk 对大于 2TB 的硬盘进行分区,并且纳闷为什么会得到需要使用 GPT 的警告? 是的,你看到的没错.我们无法使用 fdisk 对大于 2TB 的硬盘进行分区. 在这种情况 ...

  5. Linux kernel version dirty

    在我们使用git来管理Linux Kernel的时候,在编译的时候会在你的kernel version加上git commit number 有时候还会出现dirty字样,字面意思是内核被污染的意思. ...

  6. [转]Android 如何有效的解决内存泄漏的问题

    Android 如何有效的解决内存泄漏的问题   前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的 ...

  7. delphi 实现微信开发(1) (使用kbmmw web server)

    原文地址:delphi 实现微信开发(1)作者:红鱼儿 大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生 ...

  8. Linux用户和权限

    用户和用户组管理 linux使用用户和组来限制资源的使用. 在linux上运行任何程序或命令都要以一个具体的用户来运行,这个用户的权限决定了相应的程序能访问的资源和能执行的操作. 用户相关命令 组是用 ...

  9. 通过OSG实现对模型的日照模拟

    目录 1. 加载模型 2. 光照 1) 环境反射 2) 漫反射 3) 日照方向 (1) 太阳高度角和太阳方位角 (2) 计算过程 4) 改进实现 3. 阴影 4. 太阳高度角与太阳方位角的计算 1) ...

  10. Azkaban学习之路(三)—— Azkaban Flow 1.0 的使用

    一.简介 Azkaban主要通过界面上传配置文件来进行任务的调度.它有两个重要的概念: Job: 你需要执行的调度任务: Flow:一个获取多个Job及它们之间的依赖关系所组成的图表叫做Flow. 目 ...