zoukankan      html  css  js  c++  java
  • mongoDB 入门基础 ---- update()常见操作

    什么是mongDB?

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    1.创建数据库:use firstdb(这条会使用或者创建,如果没有就创建);

    2.创建集合:db.createCollection("users")  //集合就相对于一个数据库下的一个table;

    3.插入数据: db.users.insert({ name:"blue",age:22})  mongDB插入数据以标准的JS对象形式插入;

    常用快捷操作: 

    show dbs 显示所有数据库名; 

    db显示当前所在位置(使用的是哪个数据库) ;

    show collections 显示当前数据库下的集合;

    db.dropDatabase( ):删除当前数据库;

    db.集合.remove({name:"blue"}) ;删除 当前集合下的一个数据 ;

    db.集合.drop() ;删除当前集合;

    数据库最常用的操作是update()操作,下面看看:

    例如现在给users集合中的 name:"bule"的添加一个爱好属性:

    use firstdb

    db.user.update({name:"blue"},{$set:{ hobby:"play Pingpang"}}) ;            $set会给一个已经存在的数据修改一个属性,如果没有这个属性就增加这个属性和值;

    现在删除hobby这个属性:

    db.user.update({name:"blue"},{$unset:{ hobby:""}}) ;               $unset会把属性属性值都删掉;

    假设现在有一个这样的文件数据:

    {name:"bule",age:22,hobby:"play Pingpang"}

    {name:"leo",age:29,hobby:"play footbool"}

    {name:"lisi",age:24,hobby:"play games"}

    变成这样:也就就增加一个数组和多个对象:

    {name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城","十面埋伏"]}

    {name:"leo",age:29,hobby:"play footbool"}

    {name:"lisi",age:24,hobby:"play games"}

    只需:

    db.user.update({name:"blue"},{$addToSet:{readingBook:"one night in Beijing"}) ;

    db.user.update({name:"blue"},{$addToSet:{readingBook:"春城"}) ;

    db.user.update({name:"blue"},{$addToSet:{readingBook:"十面埋伏"}) ;

    或者:

    db.user.update({name:"blue"},{$push:{readingBook:"one night in Beijing"}) ;

    db.user.update({name:"blue"},{$push:{readingBook:"春城"}) ;

    db.user.update({name:"blue"},{$push:{readingBook:"十面埋伏"}) ;

    $addToSet跟$set有点类似:不同的是:前者会把一个属性认为是一个数组,不存在就push()进去,存在则不做任何操作;

    $addToSet$push的相同点都是可以往属性后面追加数组;不同的是:$push可以追加多次相同的; 即可以 ["看书","看书","看书"] ;但是$addToSet连续三次操作只会是["看书"]

    也可以用简单方式:

    var reading_some=[one night in Beijing","春城","十面埋伏] ;

    db.user.update({name:"blue"},{$addToSet:{readingBook:{$each:reading_some} }});

    如果要从数组中删除一次呢?

    db.user.update({name:"blue"},{$pop:{readingBook:1}) ;   1 表示从数组最后一项做一次删除操作; -1 表示从头开始删除一位 ;就算是删除完了再删也不会报错;

    查看一下:

    db.user.find({}) ;

    变成这样:

    {name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城"]}

    如果是吧3个人都加上同样的readingBook呢?

    只需要:

    db.user.update({},{$addToSet:{readingBook:{$each:reading_some} }}, {malti:true});      malti:true 表示多选:

    所以到了这里我们大概明白:update一个参数实际上是一个类似选择器的东西;用了赛选符合条件的数据;

    于是数据暂时变成这样:

    {name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城","十面埋伏"] }

    {name:"leo",age:29,hobby:"play footbool",readingBook:["one night in Beijing","春城","十面埋伏"] }

    {name:"lisi",age:24,hobby:"play games",readingBook:["one night in Beijing","春城","十面埋伏"] }

     

    如何把bule的readingBook数组的第一项变成 one night in HongKong 呢?

    db.user.update({name:"bule"},{$Set:{readingBook.1:"one night in HongKong"}});

    所有的呢?

    db.user.update({},{$Set:{readingBook.1:"one night in HongKong"}},{ multi :true }); 

    本人做到这里也发现了一个问题:

    先执行插入一条:

    db.user.insert({name:"kangkang",age:8});

    如果其中有一个数据没有 readingBook这个属性:那么 执行上面这条语句会出现一个奇怪的问题:

    那么{name:"kangkang",age:8}  ==>>>  {name:"kangkang",age:8 , readingBook:{ "0" : "one night in HongKong"} } 

    其实大概也能理解: $set只能生成一个对象值,不能生成一个数组;  所以按数组下标来修改所有数据其实是容易出错的,除非它们都是非常统一的数据;

  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/liuliu-hai/p/9480157.html
Copyright © 2011-2022 走看看