数据库基本操作

连接到mongoDB服务器 ./bin/mongo 127.0.0.1:12345 

查看当前数据库
> show dbs
admin  (empty)
local  0.078G

却换数据库(如果不存在会自动创建)
> use jerome
switched to db jerome

删除数据库
> db.dropDatabase()
{ "dropped" : "jerome", "ok" : 1 }

删除表
1
2
3
4
5
6
7
8
9
10
> > show tables
jerome_collection
jerome_coolection
system.indexes
> db.jerome_collection.drop()
true
> show tables #删除了当前表了
jerome_coolection
system.indexes
> 

写入

(集合数据的写入,格式为JSON)
> db.jerome_collection.insert({x:1})
WriteResult({ "nInserted" : 1 })
(插入成功)

查询

> show dbs
admin   (empty)
jerome  0.078GB
local   0.078GB
> show collections
jerome_collection
system.indexes
> db.jerome_collection.find()
{ "_id" : ObjectId("556fd29a4e8b96c5ebc42e63"), "x" : 1 }
> db.jerome_collection.find({x:1})    #可以指定参数
{ "_id" : ObjectId("556fd29a4e8b96c5ebc42e63"), "x" : 1 }

(_id是全局字段,在数据库中不会重复)

测试:再插入一条数据_id为1
1
2
3
4
5
6
7
8
9
10
11
> db.jerome_collection.insert({x:3,_id:1})
WriteResult({ "nInserted" : 1 })
> db.jerome_collection.insert({x:2,_id:1})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: jerome.jerome_collection.$_id_  dup key: { : 1.0 }"
    }
})
> 
插入两次一样的id会报错,id不可以重复。 

插入多条数据测试limit等
1
2
3
4
5
6
7
8
> for(i=3;i<100;i++)db.jerome_collection.insert({x:i})
#可以使用js语法
WriteResult({ "nInserted" : 1 })
> db.jerome_collection.find().count()
#查找总条数
99
> db.jerome_collection.find().skip(3).limit(2).sort({x:1})
#跳过前三条,取两条,使用x排序
{ "_id" : ObjectId("556ff5e8d7e60a53de941a74"), "x" : 4 }
{ "_id" : ObjectId("556ff5e8d7e60a53de941a75"), "x" : 5 }
> 

更新

Updata至少接收两个参数,一个查找的,一个更新的数据。
1
2
3
4
5
6
7
8
> db.jerome_collection.find({x:1})
{ "_id" : ObjectId("556fd29a4e8b96c5ebc42e63"), "x" : 1 }
> db.jerome_collection.update({x:1},{x:999})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.jerome_collection.find({x:1})
#已经找不到了
> db.jerome_collection.find({x:999}) 
{ "_id" : ObjectId("556fd29a4e8b96c5ebc42e63"), "x" : 999 }
> 
 
部分更新操作符(set )
1
2
3
4
5
6
7
> db.jerome_collection.insert({x:100,y:100,z:100})
WriteResult({ "nInserted" : 1 })
> db.jerome_collection.update({z:100},{$set:{y:99}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.jerome_collection.find({z:100})
{ "_id" : ObjectId("556ff84a1c99195ded71252e"), "x" : 100, "y" : 99, "z" : 100 }
> 

更新不存在数据时会自动创建
1
2
3
4
5
6
7
8
9
10
> db.jerome_collection.find({y:100})
> db.jerome_collection.update({y:100},{y:999},true)
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("556ff9556db7cf8009b5edf8")
})
> db.jerome_collection.find({y:999})
{ "_id" : ObjectId("556ff9556db7cf8009b5edf8"), "y" : 999 }

更新多条数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> for(i=0;i<3;i++)db.jerome_collection.insert({c:2})
#插入三条
WriteResult({ "nInserted" : 1 })
> db.jerome_collection.find({c:2}) 
{ "_id" : ObjectId("556ffa011c99195ded71252f"), "c" : 2 }
{ "_id" : ObjectId("556ffa011c99195ded712530"), "c" : 2 }
{ "_id" : ObjectId("556ffa011c99195ded712531"), "c" : 2 }
> db.jerome_collection.update({c:2},{c:3})
#更新
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.jerome_collection.find({c:2})
{ "_id" : ObjectId("556ffa011c99195ded712530"), "c" : 2 }
{ "_id" : ObjectId("556ffa011c99195ded712531"), "c" : 2 }
> db.jerome_collection.find({c:3})
#发现只更新一条,是为了防止误操作
{ "_id" : ObjectId("556ffa011c99195ded71252f"), "c" : 3 }
> db.jerome_collection.update({c:2},{$set:{c:3}},false,true)
#更新多条
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.jerome_collection.find({c:2})
> db.jerome_collection.find({c:3})
{ "_id" : ObjectId("556ffa011c99195ded71252f"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712530"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712531"), "c" : 3 }

删除

(必须要有参数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> db.jerome_collection.find({c:3})
{ "_id" : ObjectId("556ffa011c99195ded71252f"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712530"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712531"), "c" : 3 }
> db.jerome_collection.remove()
#不可用
2015-06-04T00:15:34.444-0700 remove needs a query at src/mongo/shell/collection.js:299
> db.jerome_collection.find({c:3})
{ "_id" : ObjectId("556ffa011c99195ded71252f"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712530"), "c" : 3 }
{ "_id" : ObjectId("556ffa011c99195ded712531"), "c" : 3 }
> db.jerome_collection.remove({c:3}) #删除必须要有参数
WriteResult({ "nRemoved" : 3 })
> db.jerome_collection.find({c:3})
#删除成功
> 

索引

数据较多时,使用索引速度加快。
查看集合索引情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> for(i=0;i<100;i++)db.jerome_collection.insert({x:i})
#添加测试数据
WriteResult({ "nInserted" : 1 })
> db.jerome_collection.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "jerome.jerome_collection"
    }
]
> 
只有一个默认索引。

创建索引
1代表正向排序,-1代表反向排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
> db.jerome_collection.ensureIndex({x:1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
> db.jerome_collection.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "jerome.jerome_collection"
    },
    {
        "v" : 1,
        "key" : {
            "x" : 1
        },
        "name" : "x_1",
        "ns" : "jerome.jerome_collection"
    }
]
> 
(使用数据库之前创建索引更好)

索引虽然会使写入的数度变慢,但是查询的速度变快了。


mongoDB基本使用(二)的更多相关文章

  1. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  2. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  3. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  4. MongoDB学习(二)Windows环境安装MongoDB

    MongoDB的官方下载站是http://www.mongodb.org/downloads,可以去上面下载最新的程序下来. 在下载页面可以看到,对操作系统支持很全面,OS X.Linux.Windo ...

  5. MongoDB 复制集(二) 选举 自动故障切换

    一   复制集的高可用性简介       复制集通过故障自动切换来实现高可用性,当主节点出现故障的时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动干预.在某些情况 ...

  6. MongoDB学习笔记(二) 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...

  7. [原创]MongoDB综合实例二

    MongoDB-Sharding部署方案 一.    部署环境 五台主机: Amongoshard01:  10.212.74.43 Amongoshard02:  10.212.84.4 Among ...

  8. MongoDB系列:二、MongoDB常用操作练习

    最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一.背景 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存 ...

  9. python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解

    1.python mysql  redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...

  10. MongoDB 学习(二)可视化界面

    一.安装可视化界面 1.mongobooster 安装和配置 1.下载安装 下载地址:https://nosqlbooster.com/downloads 下载完成后直接点击安装: 安装完成弹出界面: ...

随机推荐

  1. Python中and(逻辑与)计算法则

    在程序设计中,and称为逻辑与运算,也称布尔运算:1.and是在布尔上下文中从左到右计算表达式的值:2.0.''.[].().{}.None.False在布尔上下文中为假:其它任何东西都为真:3.如果 ...

  2. 安利三款提升幸福感的chrome插件

    谷歌访问助手 chrome浏览器一直是各大码农推荐的比较好用的浏览器,速度快.插件多. 但是由于众所周知的原因导致了谷歌账号同步.扩展商店访问慢甚至打不开的情况. 谷歌访问助手就是用来解决此问题的. ...

  3. 关于bedtools merge 功能中sort 命令的解释

    Bedtools 是一个很好的用来处理区间的工具,很多时候用这个底层语言编写的小工具比自己写的脚本运行快很多,但是这个工具中的某些功能对输入文件有一定的要求,比如说里面的一个merge函数,这是里面的 ...

  4. Python3 教程

    Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容. 查 ...

  5. Android服务——Service

    服务 Service 是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到服务,以与之进行 ...

  6. Linux 性能监测:CPU

    CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中 ...

  7. Objective-C's Init Method

    初始化器在其他面向对象的语言中(比如Java)指的是构造器. Objective-C同样拥有对象构造器在init形式的方法中.不管如何,在Objc中这些方法没有什么特殊的行为. 按照惯例,程序猿在in ...

  8. springMVC源码分析--AbstractControllerUrlHandlerMapping(六)

    上一篇博客springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)中我们介绍了AbstractDetectingUrlHandlerMapping,其定 ...

  9. 使用Xpath定位元素(和元素定位相关的Xpath语法)

    本文主要讲述Xpath语法中,和元素定位相关的语法 第一种方法:通过绝对路径做定位(相信大家不会使用这种方式) By.xpath("html/body/div/form/input" ...

  10. [Python]print vs sys.stdout.write

    之前只是在项目中看到过,没怎么注意,正好跟对象一起看python学习手册,看到了这个部分于是来研究下. python版本 2.7.x os  win7 print  一般就是执行脚本的时候,把信息直接 ...