一、插入文档

使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法:

  • db.collection.insertOne({}):(v3.2 new)  #插入一个文档到集合中
> db.users.insertOne(
... {
... name:"Marry",
... age:26,
... status:"pending"
... }
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("565d23db556b61b96bdb1b20")
}
  • db.collection.insertMany([{},{}...]) (v3.2 new) #插入多个文档
> db.users.insertMany(
... [
... {name:"Sue",age:25,status:"pending"},
... {name:"bob",age:24,status:"enrolled"},
... {name:"ann",age:28,status:"enrolled"}
... ]
... )
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("565d2d75556b61b96bdb1b21"),
ObjectId("565d2d75556b61b96bdb1b22"),
ObjectId("565d2d75556b61b96bdb1b23")
]
}
  • insert()  #既能插入一个文档,也可以插入多个文档
> post={"title":"My First blog","author":"Darren","content":"this is my first blog"}
{
"title" : "My First blog",
"author" : "Darren",
"content" : "this is my first blog"
}
> db.posts.insert(post)
WriteResult({ "nInserted" : 1 })
> db.users.insert(
... [
...   {name:"test1",age:20,status:"pending"},
...   {name:"test2",age:21,status:"enrolled"}
... ]
... )
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

二、查询文档

1、db.collection.find(query,projection)

参数说明:

     参数                         类型                        描述

query                       document                  可选,返回指定条件的文档,如果查询所有文档,({})

projection                 document                   可选,返回指定的字段,1表示true,0表示false

其中在query参数中,可以指定操作符,如大于,小于等等。

{ <field>: { $eq: <value> } }

例子说明:

  • 查询集合中全部文档
> db.a.find({})
  • 查询符合条件的文档,如_id=5的文档
> db.a.find({_id:5})
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" }, "birth" : ISODate("1931-10-12T04:00:00Z"), "death" : ISODate("2002-06-29T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "awards" : [ { "award" : "Rosing Prize", "year" : 1999, "by" : "Norwegian Data Association" }, { "award" : "Turing Award", "year" : 2001, "by" : "ACM" }, { "award" : "IEEE John von Neumann Medal", "year" : 2001, "by" : "IEEE" } ] }
> db.a.find({_id:{$eq:5}}) #通过操作符的方式
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" }, "birth" : ISODate("1931-10-12T04:00:00Z"), "death" : ISODate("2002-06-29T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "awards" : [ { "award" : "Rosing Prize", "year" : 1999, "by" : "Norwegian Data Association" }, { "award" : "Turing Award", "year" : 2001, "by" : "ACM" }, { "award" : "IEEE John von Neumann Medal", "year" : 2001, "by" : "IEEE" } ] }
  • 查询文档并返回指定字段
> db.a.find({_id:{$eq:5}},{name:1,first:1,last:1}) #返回name,first,last三个字段,默认返回_id
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" } }
> db.a.find({_id:{$eq:5}},{name:1,first:1,last:1,_id:0}) #指定_id不显示
{ "name" : { "first" : "Ole-Johan", "last" : "Dahl" } }
  • 范围查询
#查询_id大于1,小于3的文档
> db.a.find({_id:{$gt:1,$lt:5}},{name:1,first:1,last:1})
{ "_id" : 3, "name" : { "first" : "Grace", "last" : "Hopper" } }
{ "_id" : 4, "name" : { "first" : "Kristen", "last" : "Nygaard" } }

查询条件和操作符还有很多内容,具体请参考官方文档。

三、更新文档

mongodb提供以下几种方法对文档进行更新:

  • db.collection.updateOne(filter,update,options)  更新一个文档

参数                               类型                            说明

filter                               document                     同查询一样,当{}为空时,只更新集合的第一个文档

update                            document                     更新内容,可以用更新操作符,如$set,$unset,$rename

upsert                             boolean                        可选,当为true时,如果没有找到更新的文档,那么就插入新的文档

例子:

> db.a.updateOne(
... {_id :5},
... {$set :{year:2000}} #$set操作符表示更新字段的值
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.a.find({_id:5},{year:1})
{ "_id" : 5, "year" : }
  • db.collection.updateMany()
> db.a.updateMany(
... {_id :{$lt:5}},
... {$set:{year:1999}}
... )
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 } > db.a.find({_id:{$lt:5}},{year:1})
{ "_id" : 1, "year" : 1999 }
{ "_id" : 3, "year" : 1999 }
{ "_id" : 4, "year" : 1999 }
  • db.collection.replaceOne():不需要原字段和现字段一样多,可以任意替代。
> db.a.replaceOne(
... {_id:5},
... {name:"darren",address:"1022",year:1988}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.a.find({_id:5})
{ "_id" : 5, "name" : "darren", "address" : "1022", "year" : 1988 }
  • db.collection.update():可以更新一个或多个文档,当然还可以替代一个文档
db.users.update(
{ age: { $gt: 18 } },
{ $set: { status: "A" } },
{ multi: true }
)

四、删除文档

db.xxx.remove({}):删除xxx集合中所有文档,但不会删除集合本身和索引,remove必须带上过滤参数,空的{}表示删除所有。

注意:删除数据是永久性的,不能恢复,不能撤销。

当集合中数据库量非常大时,用remove删除有时很慢,drop()可以提供很好的速度,但是会把集合及索引全部删除。

除了remove方法,新版本提供以下方法进行删除:

  • db.collection.deleteOne()

可以带有过滤参数,删除匹配文档的第一个,如果不加任何过滤条件,则删除文档第一个。

db.users.deleteOne(
{ status: "reject" }
)
  • db.collection.deleteMany()
db.users.deleteMany(
{ status: "reject" }
)

另外mongodb还提供一个大杀器,可以把insert,update,delete放到一起批量执行:

db.collection.bulkWrite()

db.collection.bulkWrite(
[
{ insertOne : { "document" : { name : "sue", age : 26 } } },
{ insertOne : { "document" : { name : "joe", age : 24 } } },
{ insertOne : { "document" : { name : "ann", age : 25 } } },
{ insertOne : { "document" : { name : "bob", age : 27 } } },
{ updateMany: {
"filter" : { age : { $gt : 25} },
"update" : { $set : { "status" : "enrolled" } }
}
},
{ deleteMany : { "filter" : { "status" : { $exists : true } } } }
]
)

【三】MongoDB文档的CURD操作的更多相关文章

  1. MongoDB 文档的更新操作

    在MongoDB中,更新单个doc的操作是原子性的.默认情况下,如果一个update操作更新多个doc,那么对每个doc的更新是原子性的,但是对整个update 操作而言,不是原子性的,可能存在前面的 ...

  2. MongoDB 文档的删除操作

    在db中删除数据是十分危险的事,建议使用logic delete,即在doc中增加一个field:IsDeleted,将其设置为1,表示该doc在逻辑上被删除,这种workaround将delete操 ...

  3. MongoDB文档的增删改操作

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

  4. mongoDB 文档操作_删

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

  5. MongoDB文档基本操作

    一.插入文档 使用insert()或save()方法向集合插入文档 >db.COLLECTION_NAME.insert(document) 详细用法可以参考MongoDB菜鸟教程 二.查找文档 ...

  6. MongoDB文档的基本操作

    1. MongoDB的安装方法 (1)下载MongoDB 相应的版本: (2)设置数据文件和日志文件的存放目录: (3)启动MongoDB服务: (4)将MongoDB作为服务启动. 2. Mongo ...

  7. mongodb文档的CRUD

    本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo  如果存在foo 就use   ...

  8. mongodb文档支持的数据类型

    版权声明:转载请标明来源. https://blog.csdn.net/u014285882/article/details/25510377 1. 存储类型 mongodb文档相似于json,但不是 ...

  9. ElasticStack学习(四):ElasticSearch文档使用与操作

    一.文档的CRUD介绍 ElasticSearch中存在五种操作,分别如下: 1.Index 该操作表示:如果文档的ID不存在,则创建新的文档.若有相同的ID,先删除现有文档,然后再创建新的文档,同时 ...

随机推荐

  1. C# DataTable 转 List(大家进来讨论讨论)

    C# DataTable 转 List 方法,网上有好多,之前也收集了,感觉这个也不错,重要是自己要领会这里面的代码含义. 接不来我就把代码贴出来分享一下,大家觉得如果不好,请留言我,我来改进. us ...

  2. Git合并分支命令参数详解:git merge --ff

    今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下: 输入命令git merge -h可以查看相关参数: --ff  快速合并,这个是默认的参数.如果合并过程出现冲突 ...

  3. 结合jquery的前后端加密解密 适用于WebApi的SQL注入过滤器 Web.config中customErrors异常信息配置 ife2018 零基础学院 day 4 ife2018 零基础学院 day 3 ife 零基础学院 day 2 ife 零基础学院 day 1 - 我为什么想学前端

    在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...

  4. ASP.NET中的配置文件

    ASP.NET中的配置文件 原创 2014年10月13日 08:15:27 1199   在机房收费系统的时候曾经应用过配置文件,当时也就那么一用对配置文件了解的不是很透彻,下面就来总结一下有关配置文 ...

  5. Android 动画分析学习笔记

    一:分类: Android动画分三种:view动画(对场景中的对象不断做图像变换<平移,缩放,旋转,透明度>).帧动画(顺序播放一系列图像产生动画效果).属性动画(动态改变对象属性). 二 ...

  6. cocos2d-x 3.0 Android环境搭建(亲測通过)

    网上一大堆讲述coco2d-x 3.0 版本号的android环境搭建.真是不忍直視.讲的不清不楚,真是不知道他们自己有没有測试过.今天正好忙完项目有点时间去部署了下android环境. cocos2 ...

  7. maven+eclipse+mac+tomcat 多模块发布

    之前项目中有用到过maven,但是没运行过web的maven,所以这里记录一下. 项目的结构: ---master  //parent ---web-project // ---client-proj ...

  8. 全站301跳转 PHP

    $the_host = $_SERVER['HTTP_HOST'];//取得当前域名 $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER[ ...

  9. 请求SQL数据是存在<null>,的解决方法

    删除字典中的null 我们在处理服务器传过来的数据过程中,如果数据中出现null,我们是没法进行本地持久化处理的.在使用NSUserDaults保存本地时,如果其中一个字段的value为NULL值,就 ...

  10. LNMP环境搭建(一:nginx)

    1.从nginx官网获取源码包 # cd /usr/local/src # wget http://nginx.org/download/nginx-1.10.3.tar.gz 2.解压源码包 # t ...