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. kafka 知识点

    Replica如何分布 为了尽量做好负载均衡和容错能力,需要将同一个Partition的Replica尽量分散到不同的机器.如果所有的Replica都在同一个Broker上,那一旦该Broker宕机, ...

  2. laravel ORM 模型关联 with () 用法

    关联时想对关联表数据筛选时:MySQL查询: SELECT * FROM A LEFT JOIN B ON A.B_id = B.id AND B.condition = $condition ORM ...

  3. centos安装netcat

    Linux安装swoole后,测试UDP服务需要用到netcat,然而百度了很多安装方法,并没有一个好用的.几经尝试,终于安装成功,现在就分享给大家,以供参考. 配置环境:centos6.3 1.下载 ...

  4. RedHat7局域网下安装离线Ambari

    1 Ambari介绍.安装与应用案例介绍 1.1 Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目 ...

  5. swiper4 一个页面多个轮播

    <div class="swiper-container"> <div class="swiper-wrapper"> <div ...

  6. require 与 include 的区别

    require 的英文意思是 需要,有赖于.如果使用了这条语句,也就是告诉PHP内核,我这个程序需要这个文件,有赖于这个文件.或者通俗点儿讲就是:我要她!所以,PHP如果发现require参数中的文件 ...

  7. 为什么.net 4.6.1装了却没看到

    今天在做SignalR网站,需要在发布到的云服务器安装.net4.6.1 从网上下载了安装包,安装完之后,到Windows文件夹的 Microsoft.NET文件夹中却找不到4.6.1的文件夹. 云服 ...

  8. RTB业务知识之1-原生广告

    一.背景 Native Advertising (Native Ads), 又称为原生广告, 是2013全球媒体界爆红的关键词,从2012年年底,就有人开始提了这个名词,接着到处都可以看到这个名词,再 ...

  9. Mina 专题

    未完待续>>> 目录: 一)同步.异步.阻塞.非阻塞 二)Java中的NIO 三)Mina 异步请求 四)Mina 同步请求 五)Mina 核心类及处理流程 六)Mina 线程模型 ...

  10. 解决 liblog4cpp.a: could not read symbols: Bad value

    将 liblog4cpp.a 链接进一个 so, 编译时出现 : liblog4cpp.a(RollingFileAppender.o): relocation R_X86_64_32 against ...