文档的插入

单个文档插入

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

db.collection.insert(
     <document or array of documents>,
{
     writeConcern: <document>,
     ordered: <boolean>
    }
)

参数:

document——

要插入到集合中的文档或文档数组。(json格式)

writeConcern——

插入选择的性能与可靠性级别

ordered——

是否排序

例子:

db.comment.insert(
  {
     "articleid":"100000",
     "content":"今天我们来学习mongodb",
     "userid":"1001",
     "nickname":"Aaron",
     "createdatetime":new Date(),
     "likenum":NumberInt(10),
     "state":null
  }
)

提示:

comment集合如果不存在,则会隐式创建

mongo中的数字,默认情况下是double类型,如果要存整数型,必须使用函数NumberInt

插入当前日志使用new Date()

插入的数据没有指定_id,会自动生成主键值

如果某字段没值,可以复制为null,或不写该字段

执行成功后会出现如下成功提示

WriteResult({ "nInserted" : 1 })

批量插入

db.collection.insertMany(
  [ <document 1>, <document2>, ... ],
  {
    writeConcern: <document>,
    ordered: <boolean>
  }
)

参数:

document——

要插入到集合中的文档或文档数组。(json格式)

writeConcern——

插入选择的性能与可靠性级别

ordered——

是否排序

例子:

db.comment.insertMany([
  {
    "_id":"1",
    "articleid":"100001",
    "content":"苍茫的天涯是我的爱",
    "userid":"1002",
    "nickname":"钢铁侠",
    "createdatetime":new Date(),
    "likenum":NumberInt(1000),
    "state":"1"
  },
  {
    "_id":"2",
    "articleid":"100002",
    "content":"绵绵的青山脚下花正开",
    "userid":"1003",
    "nickname":"绿巨人",
    "createdatetime":new Date(),
    "likenum":NumberInt(1000),
    "state":"1"
  },
  {
    "_id":"3",
    "articleid":"100003",
    "content":"什么样的节奏是最呀最摇摆",
    "userid":"1004",
    "nickname":"美国队长",
    "createdatetime":new Date(),
    "likenum":NumberInt(1000),
    "state":"1"
  },
  {
    "_id":"4",
    "articleid":"100004",
    "content":"什么样的歌声才是最开怀",
    "userid":"1005",
    "nickname":"雷神",
    "createdatetime":new Date(),
    "likenum":NumberInt(1000),
    "state":"1"
 }
])

插入成功之后可以看到

{ "acknowledged" : true, "insertedIds" : [ "1", "2", "3", "4" ] }

文档的基本查询

db.collection.find(<query>, [projection])

参数:

query——

可选,使用查询运算符指定选择筛选器。若要返回集合中的所有文档,就不填

projection——

可选,指定要在与查询筛选器匹配的文档中返回的字段。若要返回匹配文档中的所有字段,就不填

例子:

db.comment.find()
# 查询所有
db.comment.find({})
# 查询所有
db.comment.find().pretty()
# 并且以JSON格式显示
db.comment.find({userid:'1003'}).pretty()
# 查询指定字段
db.comment.findOne({'state':'1'})
# 只显示查询到的第一个记录

投影查询

如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)

db.comment.find({"userid":"1002"},{"likenum":1,nickname:1}).pretty()
# 只显示likenum和nickname字段,1是显示
db.comment.find({"userid":"1002"},{"likenum":0}).pretty()
# 显示的时候隐藏likenum字段,0是不显示
db.comment.find({},{"likenum":1,nickname:1}).pretty()
# 查询所有字段,但是只显示likenum和nickname字段

文档的更新

db.collection.update(query, update, options)
db.collection.update(
    <query>,
    <update>,
    {
      upsert: <boolean>,
      multi: <boolean>,
      writeConcern: <document>,
      collation: <document>,
      arrayFilters: [ <filterdocument1>, ... ],
      hint: <document|string>
    }
)

参数:

query——

更新的选择条件

update——

要应用的修改

upsert——

可选,如果设置为true,则在没有与查询条件匹配的文档时创建新文档,默认为false,在没有与查询条件匹配的情况下不会插入新文档

multi——

可选,如果设置为true,则更新符合查询条件的多个文档,如果设置为false,则更新一个文档,默认值为false

writeConcern——

可选,表示写问题的文档,抛出异常的级别

collation——

可选,指定要用于操作的校对规则例如字母大小写和重音标记规则

arrayFilters

hint——

可选,指定用于支持查询索引的文档或字符串

覆盖修改

db.comment.update({_id:"1"},{likenum:NumberInt(1001)})
# 修改_id为1的记录,点赞量为1001
db.comment.find({_id:"1"})
# 查看这条记录,发现update是覆盖修改

局部修改

db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}})
# 修改_id为2的技能,点赞量为889
db.comment.find({_id:"2"}).pretty()
# 查看这条记录,发现修改成功

批量修改

#修改所有点赞量为1000的昵称为灭霸

db.comment.update({likenum:NumberInt(1000)},{$set:{nickname:"灭霸"}})
# 默认值修改第一条数据
db.comment.find().pretty()
db.comment.update({likenum:NumberInt(1000)},{$set:{nickname:"灭霸"}},
{multi:true})
# 修改所有符合条件的记录
db.comment.find().pretty()

列值增长的修改

使用$inc运算符来实现对某列值在原有值的基础上进行增加或减少

db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})
# 把_id为3的点赞数加一
db.comment.find({_id:"3"}).pretty()

删除文档

db.集合名称.remove(条件)

例子:

db.comment.remove({})
# 删除comment集合下的所有数据
db.comment.remove({_id:"1"})
# 删除_id=1的记录