MongoDB 插入文档

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

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

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

插入文档

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

db.COLLECTION_NAME.insert(document)

  插入时如果没有指定文档的Object ID,MongoDB会指定唯一的ObjectID。 

  如果集合不存在,mongodb会自动创建集合。

例如:

> show dbs    #显示所有数据库
exam .078GB
local .078GB
test .078GB
> db.colle1.insert({"name":"qlq","age":}) #插入文档
WriteResult({ "nInserted" : })
> show dbs    #显示所有数据库
exam .078GB
local .078GB
test .078GB
> db #查看当前数据库
test
> show tables  #查看所有集合
colle1
runoob
system.indexes
test

也可以将文档定义为一个变量之后存进去:

> document=({title:"test"})  #定义变量
{ "title" : "test" }
> db.colle1.insert(document)  #将变量存进去
WriteResult({ "nInserted" : })
>

插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

3.2 版本后还有以下几种语法可用于插入文档:

  • db.collection.insertOne():向指定集合中插入一条文档数据
  • db.collection.insertMany():向指定集合中插入多条文档数据
> var document = db.collection.insertOne({"a": })
> document
{
"acknowledged" : true,
"insertedId" : ObjectId("571a218011a82a1d94c02333")
} # 插入多条数据
> var res = db.collection.insertMany([{"b": }, {'c': }])
> res
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("571a22a911a82a1d94c02337"),
ObjectId("571a22a911a82a1d94c02338")
]
}

MongoDB 查询文档

> show tables
system.indexes
> db.colle1.insert({name:'qlq',age:})
WriteResult({ "nInserted" : })
> show collections
colle1
system.indexes
> db.colle1.find()
{ "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : }

  发现mongodb自动给维护了一个ObjectID

1.简单查询

db.colle1.find()

再次插入一条查询:

> db.colle1.insert({name:'wjy',age:})
WriteResult({ "nInserted" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : }
{ "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : }

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 :可选,抛出异常的级别。

修改单个:

> db.colle1.find()
{ "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : }
{ "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : }
> db.colle1.update({},{name:'qlq1'})
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq1" }
{ "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : }

解释;

db.colle1.update({},{name:'qlq1'}) 语句的query语句虽然没有写,会查到所有数据,但是只会修改第一条数据。而且update帮我们把整个文档替换了,只有objectid没有变。

解决办法:只修改指定属性而不替换整个文档:

原来数据:

> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "wjy", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq", "age" : }

修改数据的指定属性:在上面基础上加上{$set:    }

> db.colle1.update({},{$set:{name:'qlq1'}})
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq1", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq", "age" : }

修改多个:

> db.colle1.update({},{$set:{name:'qlq4'}},false,true)
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }

  修改多个需要使用$set,且设置multi的值为true。

save() 方法

save() 方法通过传入的文档来替换已有文档。如果不存在就添加数据,如果存在就替换数据。语法格式如下:

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

参数说明:

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

实例

1.save保存不存在的数据:

> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }
> db.colle1.save({name:'qlq',age:})
WriteResult({ "nInserted" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq", "age" : }

2.传入ObjectId修改已经存在的数据:

> db.colle1.save({"_id":ObjectId("5ab463d6bf43055cd737bd92"),name:'qlq44',age:})
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq44", "age" : }

更多实例

只更新第一条记录:

db.col.update( { "count" : { $gt :  } } , { $set : { "test2" : "OK"} } );

全部更新:

db.col.update( { "count" : { $gt :  } } , { $set : { "test2" : "OK"} },false,true );

只添加第一条:

db.col.update( { "count" : { $gt :  } } , { $set : { "test5" : "OK"} },true,false );

全部添加加进去:

db.col.update( { "count" : { $gt :  } } , { $set : { "test5" : "OK"} },true,true );

全部更新:

db.col.update( { "count" : { $gt :  } } , { $inc : { "count" : } },false,true );

只更新第一条记录:

db.col.update( { "count" : { $gt :  } } , { $inc : { "count" : } },false,false );

MongoDB 删除文档

MongoDB remove()函数是用来移除集合中的数据。

MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法

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

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

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

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

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。

实例

删除单个:

> db.colle1.find()
--23T10::40.696+ I NETWORK trying reconnect to 127.0.0.1: (127.0.0.1) failed
--23T10::40.696+ I NETWORK reconnect 127.0.0.1: (127.0.0.1) ok
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq44", "age" : }
> db.colle1.remove({name:'qlq44'},{justOne:true}) #删除单个
WriteResult({ "nRemoved" : })
> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }

如果不指定justOne会删除符合条件的多个:

> db.colle1.find()
{ "_id" : ObjectId("5ab46bbeeee8eb99039a98e4"), "name" : "qlq3", "age" : 25, "sex" : "男" }
{ "_id" : ObjectId("5ab46bc9eee8eb99039a98e5"), "name" : "qlq4", "age" : 25, "sex" : "男" }
{ "_id" : ObjectId("5ab46bd6eee8eb99039a98e6"), "name" : "qlq4", "age" : 26, "sex" : "男" }
> db.colle1.remove({name:"qlq4"})
WriteResult({ "nRemoved" : 2 })
> db.colle1.find()
{ "_id" : ObjectId("5ab46bbeeee8eb99039a98e4"), "name" : "qlq3", "age" : 25, "sex" : "男" }

删除所有:

> db.colle1.find()
{ "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : }
{ "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : }
> db.colle1.remove({})             #删除所有
WriteResult({ "nRemoved" : })
> db.colle1.find()

mongoDB文档操作【增删改】的更多相关文章

  1. MongoDB文档的增删改操作

    上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对 ...

  2. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  3. mongoDB 文档操作_删

    mongoDB 文档删除 MySQL对比 mysql delete from table where ... mongo db.collection.deleteOne(query) 删除函数 del ...

  4. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  5. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  6. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

  7. 对mongo文档的增删改操作

    在mongo db 中增加.删除.修改文档有好多方法,这里简单记录一下我所知道的一些方法. 前置条件: 1.创建study数据库  use study; 2.创建persons集合,当第一次向pers ...

  8. mongoDB 文档操作_增

    增加 / 插入 /保存 单文档插入 命令 db.collection.insertOne(doc) 功能 向被 use 的数据库中插入数据 实例 db.class.insertOne({"n ...

  9. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

随机推荐

  1. 『Golang』MongoDB在Golang中的使用(mgo包)

    有关在Golang中使用mho进行MongoDB操作的最简单的例子.

  2. Qt 实现脉搏检测-1-心跳曲线部分

    最新的想法就是写一个显示脉搏的东西,主要就是通过串口读取硬件(检测心跳的)传来的数据,在显示一下. 先实现画心跳曲线 如下图 先来电干货, 首先,在这个代码中,第一次用到了list这个东东 所以,关于 ...

  3. selenium自动化登录qq网页

    一个简单的登录网页上qq的脚本,通过此脚本了解到有些位置是无法通过xpath来定位的反倒是By定位更方便 #encoding=utf-8 from selenium import webdriver ...

  4. 怎么使用pipenv管理你的python项目

    原文链接:https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 翻译者:Jiong 在thought ...

  5. BZOJ 2597 剪刀石头布(最小费用最大流)(WC2007)

    Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道 ...

  6. chrome谷歌浏览器导致的密码被修改现象

    版本 68.0.3440.106(正式版本) (32 位)记住密码功能有个缺陷,会把自己的密码自动填写到别人的密码框中,假如这个时候点击保存密码,就会导致其他用户的密码被修改为登录用户的密码.   很 ...

  7. BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)

    首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T).同时建出最短路DAG,这样图中任何一条S到T的路径都是最短 ...

  8. P1712 [NOI2016]区间

    题目描述 在数轴上有 NN 个闭区间 [l_1,r_1],[l_2,r_2],...,[l_n,r_n][l1​,r1​],[l2​,r2​],...,[ln​,rn​] .现在要从中选出 MM 个区 ...

  9. 【题解】CQOI2015选数

    这题做的时候接连想错了好多次……但是回到正轨上之后依然是一个套路题.(不过这题好像有比莫比乌斯反演更好的做法,莫比乌斯反演貌似是某种能过的暴力ヽ(´ー`)┌)不过能过也就行了吧哈哈. 首先我们把数字的 ...

  10. 【题解】HAOI2008硬币购物

    1A什么的实在是太开心啦~~洛谷P1450 这道题目主要是考察对于容斥原理的掌握. 首先,注意到如果不存在有关硬币数量的限制而单纯询问方案的总数,就是一个简单的完全背包.这个思路提醒我们:如果能够求出 ...