【三】MongoDB文档的CURD操作

一、插入文档

使用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" : 2000 }

  • 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 } } } }
   ]
)

时间: 2024-10-25 22:25:15

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

MongoDB文档的增删改操作

上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对文档的增删改操作. 增加新文档 接着上一篇文章,打开一个MongoDB shell. 通过“show dbs”可以看到所有的数据库.然后我们通过“use blog”切换到blog数据库来开始下面的演示. 使用“db”命令显示当前正在使用的数据库. 1 C:\mongodb\bin>mongo.exe

MongoDB 文档字段增删改

MongoDB 基于CRUD(create,read,update,delete)方式实现了对集合上的文档进行增删改查.对于集合上字段的增删改,可以使用set或者unset修改器来实现.也可以使用文档替换的方式来实现.本文主要描述集合上字段的增删改,以及基于选项upsert的更新. a.语法描述 db.collection.update( <query>,                  //查询或过滤条件 <update>,                 //修改器(被修改键

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro

MongoDB文档基本操作

一.插入文档 使用insert()或save()方法向集合插入文档 >db.COLLECTION_NAME.insert(document) 详细用法可以参考MongoDB菜鸟教程 二.查找文档 find()以非结构化的方式显示集合中所有文档 >db.COLLECTION_NAME.find() 如要以格式化的方式显示所有文档 >db.col.find().pretty() 这里顺便说一下条件操作符: (>) 大于 - $gt (<) 小于 - $lt (>=) 大于等

mongodb文档支持的数据类型

1. 存储类型 mongodb文档类似于json,但不是完全的json. json只有六种类型:null, bool, 数字,字符串,数组,对象. 但是mongo的文档在json的基础上还扩展了几种类型, 比如,日期类型,整数,浮点数. mongodb真正存储在磁盘上是使用bson(binary json). 2. 常用数据类型 null: 表示不存在或空值. bool : true 和 false. string: 字符串, 用引号包含. 3. 数字 json中只有数字类型. 而mongodb

HTML 4.01 规定了三种文档类型

HTML 4.01 规定了三种文档类型:Strict.Transitional 以及 Frameset. 严格的——该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font).不允许框架集(Framesets). <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 过渡的——该 DTD 包含所有

Android官方入门文档[8]重叠操作栏

Android官方入门文档[8]重叠操作栏 Overlaying the Action Bar重叠操作栏 This lesson teaches you to1.Enable Overlay Mode 1.For Android 3.0 and higher only 2.For Android 2.1 and higher 2.Specify Layout Top-margin You should also read?Styles and Themes 这节课教你1.启用重叠模式 1.对An

Android官方入门文档[5]建立操作栏

Android官方入门文档[5]建立操作栏 Setting Up the Action Bar建立操作栏 This lesson teaches you to1.Support Android 3.0 and Above Only2.Support Android 2.1 and Above You should also read?Setting Up the Support Library 这节课教你1.仅支持Android3.0及以上2.支持Android2.1及以上 你也应该阅读?设置支

mongoDB文档操作

数据库操作无非就是增.删.改.查.这篇主要介绍增.删.改. 1.增 Mongodb插入操作很简单,使用关键字“insert”.实例: 1 > db.test.blog.insert({"haha":"xiaohaha","abc":"123"}) 2 > db.test.blog.find(); 3 { "_id" : ObjectId("5334dd149b7a445ea216655