• mongodb基本操作,CRUD


    假设当前有库test,且其中的集合也为test

    1、登录mongodb客户端

    mongo -uroot -p --authenticationDatabase "admin"

    2、查看数据库

    show dbs

    3、切换/新建数据库(如果库不存在,mongodb会自动创建,但需要库中存在集合,在show dbs的时候才会显示)

    use 数据库名称

    4、查看当前数据库中集合

    show collections

    5、插入数据,insertOne只会插入一个文旦个,如果存在多个文档,除第一个外,其他的被舍弃

    db.test.insertOne({"key":"val"})

    6、插入

    db.test.insert({"key":"val","key2":"val2"})

    7、插入多条数据

    db.test.insertMany([{"key":"val","key2":"val2",...},{"k":"v",...},...])

    8、insert方法既可以插入单条数据也可以插入多条数据,插入多条数据时,一定要添加上最外层中括号,否则只会保存第一条数据

    db.test.insert([{"key":"val",key2:val2},{"key3":"val3",key4:val4}])

    9、根据条件删除数据(如果存在多个符合条件的数据,则也只是删除第一条符合条件数据)

    db.test.deleteOne({"key":"val","key2":"val2",...})
    db.test.deleteOne({"key":{$eq:"val"},"key2":{$eq:"val2"},...})

    类似eq的操作还有很多
    https://docs.mongodb.com/manual/reference/operator/query/
    10、根据条件删除数据(如果存在多个符合条件数据,则全部删除)

    db.test.deleteMany({"key":"val","key2":"val2",...})

    或者如上述deleteOne方式使用$eq
    11、根据一个key多个值删除

    db.test.deleteMany({"key":{$in:["val","val2",...]}})

    写成以下方式不正确,最后面的值会覆盖前一个值
    db.test.deleteMany({"key":"val","key":"val2"})
    12、删除整个集合下文档

    db.test.deleteMany({})

    13、更新单个文档

    db.test.updateOne({"key":"val"},{$set:{"key2":"val2","key3":"val3",...}},{upsert:true})

    其中upsert可选值为true/false,当为true时,则表示过滤条件未查询出记录时,将进行插入操作,为false,则不进行插入,但也不会返回错误
    或者将updateOne改为update也可以,但updateOne必须使用$set修改参数
    不要使用
    db.test.update({"key":"val",...},{"key2":"val2",...}),这种方式类似于插入,会将之前的数据清除掉,重新插入数据,唯一不变的是这条记录的_id.
    需要谨记的是,如果不需要忽略掉没有修改的数据,一定要使用$set来修改数据。
    14、批量更新文档

    db.test.updateMany({"key":"val",...},{$set:{"key2":"val2",...}})

    同样该操作必须带上$set,否则会提示更新失败
    updateMany会更新所有符合过滤条件的记录对应的参数
    15、replaceOne

    16、查询全部

    db.test.find()

    17、条件查询

    db.test.find({"key":"val","key2":"val2",...})

    18、某个条件中包含所有值查询

    db.test.find({"key":{$in:["val","val2",...]},...})

    19、查询返回指定的列

    db.test.find().projection({"key":1,"key2":1})

    20、查询时去掉自带的id,在java中想去掉,直接当成普通的列去掉即可

    db.test.find({},{_id:0})

    21、查询分页

    db.test.find().skip(pageNum*pageSize).limit(pageSize)

    22、建立单个索引,升序为1,降序为-1

    db.test.createIndex({"key":1})

    此时将生成一个名为key_1的索引,如果为降序,则索引名称为-1,也可以自己命名索引名称
    23、查询某个key对应的记录中的某个字段,其中第一个{}中为查询条件,第二个为查询的列,如果第一个{}中为空,则表明查询所有列中的第二个{}中的字段

    db.test.find({"key":"val"},{"showcol1":1},"showcol2":1}).pretty()

    24、多条件查询,且有一个条件中参数为字符串
    // 查询第二个条件相等

    db.test.find({"key":"val","key":{$eq:"val"}},{"showcol":1}).pretty() 

     // 查询第二个条件不等于

    db.test.find({"key":"val","key":{$ne:"val"}},{"showcol":1}).pretty()

    25、批量修改某个字段值,下面{"_id":item._id}必须带上,否则语法不正确,后者将_id改为其他key也行,但必须得有

    db.getCollection('test').find({"key":"val"}).forEach(
      function(item){ 
        db.getCollection('test').update({"_id":item._id},{$set:{"key": "val2"}})
      }
    )

    26、查询某个字段并且去重复

    db.test.distinct("key")
  • 相关阅读:
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    linux下导入、导出mysql数据库命令
    8个必备的PHP功能开发
    jquery中的children()和contents()的区别
    centos 通用开发工具及库安装 有了它不用愁了
    将bat批处理文件注册成windows服务
    squid隐藏squid的版本号
    squid如何屏蔽User-Agent为空的请求
    RHEL/CentOS 6.x使用EPEL6与remi的yum源安装MySQL 5.5.x
  • 原文地址:https://www.cnblogs.com/qq931399960/p/12724260.html
Copyright © 2020-2023  润新知