zoukankan      html  css  js  c++  java
  • mongodb学习之:文档操作

    在上一章中有讲到文档的插入操作是用insert的方法。如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档

    find的方法可以查找所有的集合数据

    > db.maple.find()

    { "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhf" 

    也可以将数据定义为一个变量:

    document=({“name”:”zhf”})

    db.maple.insert(document)

    文档更新:

    MongoDB 使用 update() 和 save() 方法来更新集合中的文档

    参数说明:

    query : update的查询条件,类似sql update查询内where后面的。

    update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

    upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

    multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

    writeConcern :可选,抛出异常的级别。

    db.maple.update({"name":"zhf"},{"$set":{"name":"zhanghongfeng"}})

    还可以采用运算符的方式来进行判断

    > db.maple.update({"age":{"$eq":35}},{"$set":{"city":"chengdu"}})

    #找到年龄等于35的文档并将城市设置为chengdu

    > db.maple.update({"city":"chengdu"},{"$inc":{"age":1}})

    #找到城市为chengdu的文档并将age1

    > db.maple.update({"city":"chengdu"},{"$inc":{"age":-1}})

    #找到城市为chengdu的文档并将age减1

    #unset:删除某个字段

    > db.maple.update({"age":35},{$unset:{"programming":1}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.maple.find()

    { "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

    { "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing" }

    { "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

    { "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

    $push操作:把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去

    > db.maple.update({"age":35},{$push:{"programming":"javascript"}})

    > db.maple.find()

    { "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

    { "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript" ] }

    { "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

    { "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

    #当数组不存在的时候会新增一个数组

    > db.maple.update({"age":35},{$push:{"programming":"mysql"}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.maple.find()

    { "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

    { "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql" ] }

    { "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

    { "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

    #已存在的情况下则会继续往数组里面添加数据

    > db.maple.update({"age":35},{$pushAll:{"programming":["object-c","HTML"]}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.maple.find()

    { "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

    { "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql", [ "mongodb", "linux" ], "object-c", "HTML" ] }

    { "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

    { "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

    #添加多个数据到数组中采用pushAll的方式

    #addToSet

    只有在数组中不存在的时候才添加:

    > db.maple.update({"age":35},{$addToSet:{"programming":"mysql"}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

    #pop

    删除第一个和最后一个元素

    > db.maple.update({"age":35},{$pop:{"programming":1}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.maple.update({"age":35},{$pop:{"programming":-1}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    #pull:删除特定的元素

    > db.maple.update({"age":35},{$pull:{"programming":"object-c"}})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    文档查找:

    我们用关系数据库中的对比来看下:

    db.maple.find() 相当于select * from maple
    db.maple.find({"age":27}) 相当于select * from maple where age='27'
    db.maple.find({"age":27,"name":"xing"}) 相当于select * from maple where age='27' and name="xing"
    db.maple.find({},{"name":1}) select name from maple,如果name0则是不显示name字段
    db.maple.find().limit(1) 相当于select * from maple limit 1

    db.maple.find().sort({_id:-1}).limit(1)相当于select * from maple order by _id desc limit 1

     

    db.maple.find({"age":{"$in",[12,34,100]}})  相当于select * from maple where age in (12,3,100)
    db.maple.find({"age ":{"$nin",[12,3,100]}})  相当于select * from maple where _id not in (12,3,100)
    db.maple.find({"$or":[{"age":16},{"name":"xing"}]}) 相当于select * from blog where age = 16 or name = 'xing'
    db.maple.find({"id_num":{"$mod":[5,1]}}) 取的是id_num mod 5 = 1 的字段,如id_num=1,6,11,16
    db.maple.find({"id_num":{"$not":{"$mod":[5,1]}}}) 取的是id_num mod 5 != 1 的字段,如除了id_num=1,6,11,16等所有字段,多于正则一起用

    $exists判断字段是否存在

    db.blog.find({ “name” : { $exists : true }}); // 如果存在元素name,就返回
    db.blog.find({ “name” : { $exists : false }}); // 如果不存在元素name,就返回

    #查询数组:

    db.blog.find({"coding":{"$size":4}})  coding数组长度为3的符合结果

    db.blog.find({"coding":{"$all":["C", "python", "Go", "Java" ]}})   fruit中必需有数组中的每一个才符合结果

  • 相关阅读:
    人月神话阅读笔记01
    梦断代码阅读笔记03
    构建之法阅读笔记03
    构建之法阅读笔记02
    个人课程总结
    第十六周进度总结
    计算最长英语单词链
    第十五周进度总结
    浪潮之巅阅读笔记03
    冲刺2-10
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8052295.html
Copyright © 2011-2022 走看看