MongoDB 入门命令

查看当前数据库

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> -- use databaseName 选库
> use test
switched to db test
> -- show tables/collections 查看当前库下的collection
> show tables
> show collections
>

基础操作

Mongodb的库是隐式创建,你可以use 一个不存在的库然后在该库下创建collection,即可创建库

--创建collection
--db.createCollection(‘collectionName’) > db.createCollection('test')
{ "ok" : 1 }
>
> show tables
test
> --collection允许隐式创建
--Db.collectionName.insert(document);
> db.stu.insert({stu:'001',name:'xiaoming'})
WriteResult({ "nInserted" : 1 })
> show tables
stu
test -- 删除collection
db.collectionName.drop() -- 删除database
db.dropDatabase();
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
>

插入数据

> db.stu.insert({sid:"10"})
WriteResult({ "nInserted" : 1 })
> db.stu.insert({sid:"11"})
WriteResult({ "nInserted" : 1 })
> db.stu.find()
{ "_id" : ObjectId("5c0c8a0b31a9b3cbb9df1d4f"), "sid" : "10" }
{ "_id" : ObjectId("5c0c8ac731a9b3cbb9df1d50"), "sid" : "11" }

添加数据时不添加任何主键,会制动生成一个主键,主键不会像关系型数据库那样自动递增(为了分布式考虑),使用的是时间戳+机器编号+进程编号+序列号来生成,保证每个id都是唯一的.id为5c0c8a0b31a9b3cbb9df1d4f,可以分解为
5c0c8a0b 31a9b3 cbb9 df1d4f (5c0c8a0b)表示时间戳, 31a9b3 表示机器号, cbb9 表示进程编号, df1d4f 表示序列号

我们也可以手动指定ID

> db.stu.insert({_id:"001","sid":"12"})
WriteResult({ "nInserted" : 1 })
> db.stu.find()
{ "_id" : ObjectId("5c0c8a0b31a9b3cbb9df1d4f"), "sid" : "10" }
{ "_id" : ObjectId("5c0c8ac731a9b3cbb9df1d50"), "sid" : "11" }
{ "_id" : "001", "sid" : "12" }
>

批量插入

> db.user.insert([
... {username:"xiaoming",nickname:"XM",passwd:"123"} ,
... {username:"xiaogang",nickname:"XG",passwd:"111"},
... {username:"xiaohua",nickname:"XH",passwd:"123"}
... ])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
# 查看数据
> db.user.find().pretty()
{
"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d51"),
"username" : "xiaoming",
"nickname" : "XM",
"passwd" : "123"
}
{
"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d52"),
"username" : "xiaogang",
"nickname" : "XG",
"passwd" : "111"
}
{
"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d53"),
"username" : "xiaohua",
"nickname" : "XH",
"passwd" : "123"
}

执行插入数据的时候,驱动程序会把数据转换成为BSON格式,然后将数据输入数据库,数据库会解析BSON,并检验是否含有“_id”键,因为用户如果没有自定义”_id”,会自动生成,而且每次插入的文档不能超过16M(插入文档的大小跟MongoDB版本有关系)

删除文档

方式一

db.user.deleteMany({})

> db.user.deleteMany({})
{ "acknowledged" : true, "deletedCount" : 3 }
>
> db.user.remove({})
WriteResult({ "nRemoved" : 3 })

上述命令会删除user所有的文档,不删除集合本身,原有的索引也会保留,remove函数可以接收一个查询文档作为可选参数给定参数后,可以删除指定符条件的文档。

方式二

> db.user.remove({passwd:"123"})
WriteResult({ "nRemoved" : 2 })
> db.user.find().pretty()
{
"_id" : ObjectId("5c0c91d131a9b3cbb9df1d5b"),
"username" : "xiaogang",
"nickname" : "XG",
"passwd" : "111"
}

删除数据是永久性的不可以撤销也不能恢复。

更新文档

在MongoDB中更新单个文档的操作是原子性的,默认情况下如果一个update操作多个文doc,那么对于每个doc的更新是原子性的,但是对于整个update操作而言,不是原子性的可能存在前面的doc更新成功,而后面的文档更新失败,由于更新单个文档doc的操作是原子性的,如果两个更新同时发生,那么一个更新操作会足协另外一个,doc的最终结果的值是由事件靠后的更新操作删除决定的.

格式

db.collection.update(critera,objNew,upset,multi)

critera:查询条件

objNew:update对象和一些更新操作符

upset:如果存在update记录,是否插入objNew这个新文档,true为插入,默认为false

multi:默认是false,值更新找到的第一条记录,如果是true,按照条件查询出看来的记录全部更新

save

另一个更新命令是save 格式如下

db.collection.save(object)

obj表示要更新的对象,如果内部已经存在一个和obj相同的”_id”的记录纸Mongodb会把obj对象替换集合内已存在的记录,如果不存在,则会插入obj对象.

文档替换

用于一个新文档完全替代匹配的文档,这种方法先把数据读出来,之后对对象的方式完成修改,这种方式一般用在修改较大的情况下:

db.user.insertOne({
name:"foo",
nickname:"bar",
friends:12,
enemies:2
})

我们希望把数据修改成为

db.user.insertOne({
name:"foo",
nickname:"bar",
relations:{
friends:12,
enemies:2
}
})

步骤

查询对象存储到u中:

var u = db.user.findOne({name:"foo"})

设置relations的值:

u.relations = {friends:u.friends,enemies:u.enemies}

修改username的值:

> u.username = u.name
foo

删除friends:

> u.username = u.name
foo

删除enmies:

> delete u.enemies
true

删除name:

delete u.name

替换对象

> db.user.update({name:"foo"},u)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

查询

> db.user.find().pretty()
{
"_id" : ObjectId("5c0cab14d22a51c6ef9cdcee"),
"nickname" : "bar",
"relations" : {
"friends" : undefined,
"enemies" : undefined
},
"username" : "foo"
}

这种替换基于编程思想来进行的这种方式对单个对象傅咋修改比较适用

使用修改器

修改文档只修改文章的部分,而不是全部,这个时候我们可以使用修改器对文档进行更新,他的主要思想是通过$符号来进行修改这些操作

增加和减少

inc可以对数据进行增加和减少,这个操作只针对数字类型,小数或者整数.

添加一条数据:

> db.topic.insertOne({title:"first",version:108})
{
"acknowledged" : true,
"insertedId" : ObjectId("5c0cb1ba422725fda4bd5746")
}
> db.topic.find().pretty()
{
"_id" : ObjectId("5c0cb1ba422725fda4bd5746"),
"title" : "first",
"version" : 108
}

将数字减少3

> db.topic.update({"title" : "first"},{$inc:{version:-3}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.topic.find().pretty()
{
"_id" : ObjectId("5c0cb1ba422725fda4bd5746"),
"title" : "first",
"version" : 105
}

$set修改器

使用 set 可以完成的顶的需求修改

原始数据
> db.author.find().pretty()
{
"_id" : ObjectId("5c0cb444422725fda4bd5747"),
"name" : "foo",
"age" : 20,
"gender" : "male",
"intro" : "student"
}

将intro 修改为 teacher

> db.author.update({name:"foo"},{$set:{intro:"teacher"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.author.find().pretty()
{
"_id" : ObjectId("5c0cb444422725fda4bd5747"),
"name" : "foo",
"age" : 20,
"gender" : "male",
"intro" : "teacher"
}
>

$push修改器

使用push可以完成数组的插入,会在最后一条插入,如果没有这个key会自动创建一长条插入

> db.post.find().pretty()
{
"_id" : ObjectId("5c0cc527422725fda4bd5748"),
"title" : "a blog",
"content" : "...",
"author" : "foo"
}
#s使用push插入数组 db.post.update({title:"a blog"},{$push:{comments:{name:"lina",email:"lina@email.com",content:"lina replay"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.find().pretty()
{
"_id" : ObjectId("5c0cc527422725fda4bd5748"),
"title" : "a blog",
"content" : "...",
"author" : "foo",
"comments" : [
{
"name" : "lina",
"email" : "lina@email.com",
"content" : "lina replay"
}
]
}

addToSet修改器

使用addToSet可以向一个数组添加元素,有一个限定条件,如果存在了就不添加.

{
"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),
"name" : "foo",
"age" : 12,
"email" : [
"foo@example.com",
"foo@163.com"
]
}
## 添加集合
> db.user.update({name:"foo"},{$addToSet:{email:"foo@qq.com"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
查询结果
> db.user.find().pretty()
{
"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),
"name" : "foo",
"age" : 12,
"email" : [
"foo@example.com",
"foo@163.com",
"foo@qq.com"
]
}
>
## 插入一个存在的数据
> db.user.update({name:"foo"},{$addToSet:{email:"foo@qq.com"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
> db.user.find().pretty()
{
"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),
"name" : "foo",
"age" : 12,
"email" : [
"foo@example.com",
"foo@163.com",
"foo@qq.com"
]
}

nModified键的值为 0 ,因为已经添加了,所以执行添加语句的时候不会重复添加的,这种机制减少了数据库的冗余数据.

更新多个文档

> db.clllections.update({x:1},{x:99})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.clllections.find().pretty()
{ "_id" : ObjectId("5c0ccc58cdb93a655448eec6"), "x" : 99 }
{ "_id" : ObjectId("5c0ccc61cdb93a655448eec7"), "x" : 1 }
{ "_id" : ObjectId("5c0ccc65cdb93a655448eec8"), "x" : 1 }
{ "_id" : ObjectId("5c0ccc6acdb93a655448eec9"), "x" : 2 }
>
只有第一条匹配了 采用如下命令
> db.clllections.update({x:1},{$set:{x:99}},false,true)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.clllections.find().pretty()
{ "_id" : ObjectId("5c0ccc58cdb93a655448eec6"), "x" : 99 }
{ "_id" : ObjectId("5c0ccc61cdb93a655448eec7"), "x" : 99 }
{ "_id" : ObjectId("5c0ccc65cdb93a655448eec8"), "x" : 99 }
{ "_id" : ObjectId("5c0ccc6acdb93a655448eec9"), "x" : 2 } 首先我们要将修改的数据赋值给$set,$set是一个修改器,我们将在上文详细讲解过,然后后面多了两个参数,第一个flase表示如果不存在update记录,是否将我们要更新的新文档插入,
true 表示插入 false 表示不插入,第二个true表示是否更新全部属性的文章,false表示值更新第一条记录,true表示更新所有查到的文档.

MongoDB基础命令的更多相关文章

  1. MongoDB基础命令及操作

    MongoDB:NoSQL数据库 MongoDB中的重要指示点 MongoDB中的三要素 数据库 集合 文档 MongoDB中的数据存储是以Bson的形式存储的,Bson是二进制的json,所以看上去 ...

  2. 2、链接数据库+mongodb基础命令行+小demo

    链接数据库并且打印出数据的流程:1.在CMD里面输入 mongod 2.在CMD里面输入 mongo 3.在输入mongodb命令行里面进行操作,首先输入 show dbs 来查看是否能够链接得上库4 ...

  3. MongoDB 基础命令行

    本文专门介绍MongoDB的命令行操作.其实,这些操作在MongoDB官网提供的Quick Reference上都有,但是英文的,为了方便,这里将其稍微整理下,方便查阅. 登录和退出 mongo命令直 ...

  4. MongoDB基础命令笔记

    一.创建数据库 use foobar 二.创建集合 db.persons.insert({name:"zhaomin",age:23}) 三.查找 db.persons.find( ...

  5. MongoDB 基础命令使用学习记录

    1. 启动 mongod 几个常用命令说明:--dbpath : 指定数据库相关文件的存储目录 --logpath: 指定日志文件的存储目录 --port: 指定数据库的端口,默认是 27017 -- ...

  6. MongoDB 基础命令——数据库表的增删改查——遍历操作表中的记录

    分组排序查询最大记录 //对 "catagory" 不等于 null 的数据进行分组查询,且查询结果倒序 db.getCollection('userAccount').aggre ...

  7. MongoDB 基础命令 (MongoDB Shell)

    1.我们 mongodb 安装成功后,用上一篇的方法启动 mongodb服务 然后使用 mongodb shell 来做数据库的增删改查 2.创建数据库 语法: use 数据库名称 案例: > ...

  8. MongoDB 学习笔记一 安装以及基础命令

    一.MongoDB安装配置 1.获取最新版本号: wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz 2.解压缩就可 ...

  9. MongoDB 目录分析、基础命令、参数设置

    目录分析 1.整体目录 以msi默认的data.log路径安装,才会有data.log文件夹. 2.bin目录 3.log目录 基础命令 1.服务器端基础命令 net  start  MongoDB  ...

随机推荐

  1. mina学习总结

    一.简介: Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步 IO 默认使用 ...

  2. MySQL跨库查询例子

    库1 gxjob 库2 funshixi SELECT a.`company_id`,b.`companyname` FROM `gxjob`.`qj_activity_thousands_of_sc ...

  3. SQL Server 2005无法远程连接的解决方法 (转帖)

    方法如下:  一.为 SQL Server 2005 启用远程连接1. 单击"开始",依次选择"程序"."Microsoft SQL Server 2 ...

  4. Go sql insert update使用举例

    本文结合使用场景简单介绍sql中的insert.update的使用. 以下是代码: 如果记录已经存在,则更新,否则插入新记录. package main import ( "database ...

  5. Python程序的执行过程 解释型语言和编译型语言

    转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...

  6. NPC问题及证明

    致谢:http://www.docin.com/p-1902790324.html

  7. InfluxDB 1.6文档

    警告!此页面记录了不再积极开发的InfluxDB的早期版本.InfluxDB v1.7是InfluxDB的最新稳定版本. InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆 ...

  8. Mysql 性能优化4 mysql参数配置

    mysql 参数的介绍 大概450项参数,大多保持默认就可以了 错误的参数 崩溃,错误,运行缓慢. 参数最好在生产环境前配置好.最好不要在生产环境 中 直接配置,有可能不会立即生效,或者之前的数据和配 ...

  9. centos 7 免密登录

    本文转载自:https://www.cnblogs.com/hobinly/p/6039844.html 环境示例 Centos7  192.168.1.101 master Centos7 192. ...

  10. 生成器&迭代器,模块

    列表生成式 将列表data=[1,2,3]里的元素都乘2 方法一 data=[1,2,3] for index,i in enumerate(data): data[index] *=2 print( ...