MongDB学习03:数据基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/damage_e/article/details/78722423

文档 组成 集合;集合 组成 数据库。
文档 如同python中dict.
数据库操作是使用JavaScript shell进行操作

数据库操作

  • 查看所有数据库
    show dbs
  • use 切换数据操作,也是创建数据库命令
    use test
  • 数据库删除
    db.dropDatabase()
  • 查看集合
    show collections显示所有数据库中的集合,或者show tables
  • insert 数据创建
    post = {"title":"My Blog Post","content":"Here's my blog post.","date":new Date()}
    db.blog.insert(post)
    1. 批量插入
      batchInsert([{name:Jack,sex:male},{name:Bob,age:25},{name:Rose,age:23},{name:Dan,age:36}])
    2. save(),是一个shell函数,如果如果有相同_id的,直接进行替代操作,而insert则会报错。
  • find()/findOne() 数据读取
    db.blog.find()
    db.test_collection.find().count() //查看数据条数
    db.test_collection.find().skip(3).limit(2).sort({x:1})//跳过前三条,限制条数为2,并以x排序
    高级功能:
    1.只返回需要的键值:
    db.users.find({},{"username" : 1,"email" : 1})
    但“_id”默认都要返回,此时用:
    db.users.find({},{"username" : 1,"_id" : 0})
    2.查询条件:$lt,$lte,$gt,$gte对应<,<=,>,>=
    可用于数和日期。
    db.users.find({"age":{"$lt":30,"$gt":20}})
    3.元操作符$and,$or,$nor
    db.users.find({"$and":[{"x":{"$lt":1}},{"x":4}]})

  • update() 数据更新

1.至少接受两个参数(一个限定条件,一个新文档)
post.comments = [] //改值
db.blog.update({title:"My Blog Post"},post) //更新
db.blog.update({title:"My Blog Post"},{$set:{"content":"U R my boby!"}}) //用$set{}进行部分更新
2.upsert 即update的第三个参数值为true,update({},{},true)
db.blog.update({title:"My Blog Week"},{title:"My Blog Week","content":"My weekday very happy!"},true) //实现update insert操作,不存在的数据自动插入
update 默认只更改查找到的第一条信息,更新查到的所有数据用:
>update({x:1},{$set:{x:2}},false,true)
db.blog.find() //查看
想查看更新了多少数据量用命令:
>db.runCommand({getLastError:1})
{
    "err":null,
    "updatedExisting":true,
    "n":5,
    "ok":true
}//其中n表示更新文档数

3.返回被更新的文档(findAndModify):
>db.runCommand({"findAndModify":"processes","query":{"status":"READY"},"sort":{"priority":-1},"update":{"$set":{"status":"RUNNING"}})
//但 返回的是更新前的文档。
findAndModify还有很多可以用的字段:
findAndModify=》字符串,集合名;
query=》查询文档,检索文档的条件;
sort=》排序结果条件;
update/remove=》修改器文档(和remove必定指定一个);
new=》布尔类型,表示返回更新前还是更新后的文档,默认是返回更新前的文档;
fields=》文档中需要返回的字段(可选);
upsert=》



>
  • remove() 数据删除
    在没有条件限定时,会将集合中的所有数据全部永久删除
    db.blog.remove({title:"My Blog Post"})
    (数据库集合清空:db.collection.drop()和删除一个文档的时间差不多)

数据修改器

  • $set / $unset在update语句中更新(添加)/删除部分内容
    修改内嵌文档:
    db.blog.posts.update({"author.name":"joe"},{"$set":{"author.name":"joe scheme"}})
  • $inc用来增加减少某一整型/长整型/双精度字段
    db.games.update({"game":"pinball","user":"joe"},{"$inc":{"score":50}})
  • $push / $pop数组元素中增添/删除元素
    1. db.blog.posts.update({"title":"A blog Post"},{"$push":{"comments":{"name":"joe","email":"[email protected]","content":"nice post"}}})在数组末尾加入一个元素,没有数组自动新建数组。
    2. 同时加入多个元素可以用$each辅助:
      db.stock.ticker.update({"_id":"good"},{"$push":{"hourly":{"$each":[25,454,674,66,48]}}})
    3. 固定数组长度$slice
      db.movies.update({"genre":"horror"},{"$push":{"top10":{"$each":["Nightmare","saw"],"slice":-10}}})会保存最后10个元素
      如果保留评分最高的10个,这里可以用到$sort:
      db.movies.update({"genre":"horror"},{"$push":{"top10":{"$each":[{"name":"Nightmare","rating":6.7},{"name":"saw","rating":5.9}],"slice":-10,"$sort":{"rating":-1}}}})
  • $ne / $addToSet 将数组当成数据集(不重复数据)
    1. db.papers.update({"authors cited":{"$ne":"Richie"}},{"$push":{"authors cited":"Richie}})
    2. db.users.update({"_id":"good01"},{"$addToSet":{"email":{"$each":["[email protected]","[email protected]"]}}})
  • $pop从数据头/尾删除元素{"$pop":-1/1}
    $pull删除匹配的所有元素`
  • $定位操作号进行数组数据修改
>db.blog.posts.findOne()
{
    "_id":post_id,
    "content":"..,.,..,",
    "comments":[
        {"comment":"good post",
         "author":"John",
         "votes":0
        },
        {"comment":"i thought it was too long",
         "author":"Claire",
         "votes":3
        },
        {"comment":"free coffe",
         "author":"Dan",
         "votes":9
        }
    ]
 }
 // 1.用数据下标
>db.blog.update({"post":post_id},{"$inc":{"comments.0.votes":1}})
//使用$定位符
>db.blog.update({"comments.author":"John"},{"$set":{"comments.$.author":"Jim"}})
//定位符只更新第一个匹配的元素。

修改器速度:
"$inc"不改变文档大小,速度很快;
"$set/$push/insert"会修改集合的填充因子,速度很慢

写入安全机制

  • 应答式写入
  • 非应答式写入

猜你喜欢

转载自blog.csdn.net/damage_e/article/details/78722423