文档的插入
单个文档插入
使用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的记录
Comments | NOTHING