数据库基本操作

连接到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. 小程序上拉下拉共存时不可使用scroll-view的解决方法

    使用 bindscrolltolower ,必须搭配使用的 scroll-view 会导致小程序 "enablePullDownRefresh": true 下拉不能使用. 解决方 ...

  2. 原生JS模拟百度搜索关键字与跳转

    <style type="text/css"> *{ margin: 0; padding: 0; } #text{ width: 300px; height: 30p ...

  3. 110个oracle常用函数总结

    . ASCII 返回与指定的字符对应的十进制数; SQL) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- ---- ...

  4. js数组排序,支持正反排序以及多维度排序

    工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...

  5. webpack 4 + mockjs

    一.创建项目目录 二.添加开发依赖( html-webpack-plugin.webpack.webpack-cli.webpack-dev-server.webpack-api-mocker) 如下 ...

  6. SpringMVC之Ajax与Controller交互

    前面学习了拦截器,通过拦截器我们可以拦截请求,做进一步处理之后再往下进行,这里我们使用Ajax的时候会有一个问题就是会把js.css这些静态资源文件也进行了拦截,这样在jsp中就无法引入的静态资源文件 ...

  7. Linux操作系统进程模型分析进程

    Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...

  8. 20160221.CCPP体系详解(0031天)

    程序片段(01):01.结构体静态数组.c+02.结构体动态数组.c 内容概要:结构体数组 ///01.结构体静态数组.c #include <stdio.h> #include < ...

  9. java自动装箱拆箱总结

    对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性.以下是结合测试代码进行的总结. 测试代码: int a ...

  10. Activity平移动画

    Activity平移动画 效果图 添加动画文件 在res下添加anim文件夹,在anim下添加几个动画文件,分别是进入和退出的动画时间和移动距离,属性很简单,一看就懂,不磨叽了. tran_next_ ...