• mongodb学习05 操作详解(3)


    高级查询选项

    //简单查询
    var cursor = db.foo.find({"foo" : "bar"})
    //封装查询
    var cursor = db.foo.find({"foo" : "bar"}).sort({"x" : 1})
    
    • 实际情况不是将{"foo" : "bar"}作为查询直接发送给数据库,而是先将查询封 装在一个更大的文档中;shell会把查询从{"foo" : "bar"}`转换成 {"(query" : {"foo" : "bar"},")orderby" : {"x" : 1}};

    • $maxscan: 指定本次查询中扫描文档数量的上限。

    db.foo.find(criteria)._addSpecial("$maxscan", 20)
    
    • $min: 查询的开始条件。在这样的查询中,文档必须与索引的键完全匹配。查询中会强 制使用给定的索引。

    • $max : 查询的结束条件。在这样的查询中,文档必须与索引的键完全匹配。查询中会强 制使用给定的索引。

    • $showDiskLoc: 用于显示该条结果在磁盘上的位置。

    db.foo.find()._addSpecial('$showDiskLoc',true);
    

    获取一致结果

    • 数据处理通常的做法就是先把数据从 MongoDB 中取出来,然后做一些变换,最后再存回去:

    • 如果结果集比较大,MongoDB 可能会多次返 回同一个文档;


    • 对查询进行快照;如果使用了这个选项,查询就在_id 索引上遍历执行,这样可以保证每个文档只被返回一次。

    • 快照会使查询变慢,所以应该只在必要时使用快照。

    db.foo.find().snapshot();
    

    游标生命周期

    • 服务器端,游标消耗内存和其他资源;
      • 所以要在合理的前提下尽量保证尽快释放游标;
    • 游标完成匹配结果的迭代时,它 会清除自身;
    • 如果客户端的游标已经不在作用域内了,驱动程序会向服务器 发送一条特别的消息,让其销毁游标;
    • 如果一个游标在 10 分钟内没有使用的话,数据库游标也会自 动销毁;
    • 有时的确希望游标持续的时间长一些,多数驱动程序都实现了一个叫immortal的函数,或者类似的机制,来告知数据库不要让游标超时销毁。

    数据库命令

    • runCommand
    db.runCommand({"drop" : "test"});
    db.test.drop()
    
    • db.listCommands(): 可以看到所有的数据库命令;

    数据库命令工作原理

    • 数据库命令总会返回一个包含 "ok" 键的文档。
    • 如果 "ok" 的值是 1,说明命令执行 成功了;
    • 如果值是 0,命令执行失败,命令的返回文档中就会有一个额外的键errmsg
    • MongoDB中的命令被实现为一种特在$cmd集合上执行殊类型的查询;
    db.runCommand({"drop" : "test"});
    db.$cmd.findOne({"drop" : "test"});
    
    
    • 有些命令需要有管理员权限,而且要在admin数据库上才能执行;可以使用adminCommand而不是runCommand:
    • 数据库命令是少数与字段顺序相关的地方之一:命令名称必须是命 令中的第一个字段。
    修改时间字符为date类型
    db.celebrity_news.find({}).forEach(function(doc) {
     db.celebrity_news.update({_id: doc._id}, {$set: {newsTime: new Date(doc.newsTime)}})    
    })
    
    远程导出数据
    mongoexport -h 远程地址 --port 端口 -u 用户名 -p 密码 -d 数据库 -c 集合 -f 字段1,字段2  -o  本地文件名
    
  • 相关阅读:
    PrintStream标准字节输出流
    DataInputStream数据字节专属输入流
    java.io.DateOutputStream:数据专属字节输出流
    BufferedWriter带有缓冲区的输出流 及 OutputStreamWriter转换流
    BufferedReader带有缓冲区的输入流 及 InputStreamReader转换流
    FileWriter输出文本流
    FileReader输入文本流
    使用FileInputStream 和 FileOutputStream 进行copy流 和 使用FileReader 和 FileWriter 进行 copy流案例:
    FileOutputStream输出字符流
    window docker的安装
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4783901.html
Copyright © 2020-2023  润新知