zoukankan      html  css  js  c++  java
  • mongo增删改操作

    一、1、下载好http://www.mongodb.org/downloads 的包,放到指定的盘符,我放在C盘mongo的文件夹里

      2、打开cmd,首先找到“mongodb”的路径,然后运行mongod开启命令,同时用--dbpath指定数据存放地点为“db”文件夹 

    注意:这是网上的截图 我的是c盘 mongo文件夹;就运行起来了

    3、要看下是否开启成功,mongodb采用27017端口,那么我们就在浏览器里面键入“http://localhost:27017/”,打开后,mongodb告诉我们在27017上Add 1000可以用http模式查看mongodb的管理信息。成功

    二、增删改

    1、找到刚才的路径,并运行mongo编辑器

    默认连接的是 test数据库

    2、往数据库里插入集合和数据

    (insert)

    下图里包含了单文档插入、嵌套文档插入、多个文档同时插入的命令;插入时会为每个文档生成objectid,即_id字段;

    插入文档时会对文档进行基础校验。例如文档结构beson格式,文档大小,最大不能超过16M

    (删除Remove)

    删除文档不会删除集合本身也不会删除集合的元信息,只永久删除文档,不能撤销不能恢复。remove可以接受一个查询文档作为可选参数,也是beson格式;

    如果是清空整个集合用 drop

     update

    更新文档update有两个参数,一个是定位需要更新的文档,一个是要修改为的文档。

     很多时候我们更新只是一部分更新,例如只更新文档中的一个字段,可以使用修改器去修改

    修改器:

    (1)$set用来指定一个字段的值,如果不存在就创建它。注意如果需要增加、修改、删除键时一定要用 $修改器

    (2)$inc用来增加键的值,如果没有就创建它。和$set的用法类似,$int专门用来增加或减少数值的,不能操作字符串。用来统计比较方便

    例如:db.person.update({"name":"jack"},{"$inc":{"score":10}})  会自动创建score键

    (3)$push会向一个已有的数组里面加入一个元素,如果没有就创建。例如向一个商品增加评论

    (4)$push和$each一起使用可以依次往数组里添加多条记录 db.person.updat({"_id":"2222"},{"$push":{"address.city":{"$each":["shanghai","beijing"]}}})

    (5)$push和$each和$slice一起使用还可以设定数组的最大长度 $slice的值必须是负整数,从最后包含的开始筛选

    db.person.updat({"_id":"2222"},{"$push":{"address.city":{"$each":["shanghai","beijing","nanchang"],"$slice":-2}}})  只加入最后加入的2个,可以用$slice来创建队列

     既然能插入数组,如何保插入的证数组的元素不重复呢?

    $ne和push实现或者 $addtoset 可以保证插入不重复的数组元素

    (6) 删除数组的元素

    $pop:    {"$pop":{"key":1}} 从数组末尾删除一个元素  {"$pop":{"key":-1}} 从数组开头删除一个元素

    $pull:    如果需要删除满足条件的数组元素 {"$pull":{"":""}} 会将所有匹配的文档删除

    find

    db.person.find()  查询所有

    db.person.find({"name":"jack"})  查询name是jack的文档

    db.person.find({"name":"lishuai","address.city":"shanghai"})  查询嵌套文档

    db.person.find({"age":{$gt":22}})  查询年龄大于22的文档

    db.person.find("address.city":{$in["shanghai","beijing"]}) 查询城市在上海、北京的文档

    db.person.find({$where:function(){return this.name=='jack'}})  使用$where查询name是jack的文档

    查询器的含义: "$gt"(>), "$gte"(>=), "$lt"(<), "$lte"(<=), "$ne"(!=)

    关系操作符: "$or", "$in","$nin" 

     Limit、Skip、Sort  限制返回结果的数量:

    db.person.find() .Limit(3) 返回指定数量的结果

    db.person.find() .Skip(3) 略过前3个匹配项

     db.person.find().limit(3).sort({age:-1})  返回三个数据且按照年龄降序排列

     db.person.find().limit(3).skip(3).sort({age:-1})  返回每页3个数据的第二页且按照年龄降序排列 ;

    注意:略过过多会导致性能问题,因为需要先找到需要略过的数据然后在抛弃。所以要尽量避免使用skip略过过多的数据;

    解决办法是:针对上一次的搜索结果来计算下一次的查询;例如查询第一页100条数据按照日期降序排列,第二页时就查询小于第一页结果集中最小的记录的钱100条数据,降序排列;这样就没有skip了

    mongo对混合域的排序:

    有时一个键的值可能是多种类型的,bool,数字、字符串、文档等。对他进行排序是事先预定义好的:优先级从小到大:最小值、null、数字、字符串、对象、数组、二进制数据、对象id、布尔型、日期、时间、正则、最大值

  • 相关阅读:
    inner join和join
    Java输入输出流
    数据库基础——并发控制
    逻辑题
    数据库基础——数据库设计
    JDBC
    XmlHttpRequest
    servlet乱码
    Tomcat缺少服务
    poj2388---求奇数个数字的最中间的数
  • 原文地址:https://www.cnblogs.com/shaner/p/4797345.html
Copyright © 2011-2022 走看看