高级查询选项

//简单查询
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  本地文件名

mongodb学习05 操作详解(3)的更多相关文章

  1. mongodb学习04 操作详解(2)

    查找文档 筛选查找 db.collection.find(); 返回一个集合中文档的子集,子集的 范围从 0 个文档到整个集合; db.collection.findOne(); 返回筛选的一个文档; ...

  2. mongodb学习03 操作详解

    插入文档 db.test.insert({"name":"jinks"}); 批量插入 db.test.insert([{}, {}, {}]); 一次批量插入 ...

  3. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  4. js学习--DOM操作详解大全一(浏览器对象)

    一.客户端中的window对象 window对象表示当前浏览器的窗口,它是一个顶级对象,我们创建的所有对象.函数.变量都是window对象的成员. window对象自带了一些非常有用的方法.属性. w ...

  5. js学习--DOM操作详解大全 前奏(认识DOM)

    一 . 节点属性 DOM 是树型结构,相应的,可以通过一些节点属性来遍历节点树: 方法 说明 nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text.nodeNa ...

  6. js学习--DOM操作详解大全二(window对象)

    一.window - 计时器 1、setTimeout()可以用来在指定的时间之后单次调用函数.setTimeount(f,1000);//一秒后调用函数fclearTimeout();取消函数的执行 ...

  7. 从51跳cortex-m0学习2——程序详解

    跳cortex-m0——思想转变>之后又一入门级文章,在此不敢请老鸟们过目.不过要是老鸟们低头瞅了一眼,发现错误,还请教育之,那更是感激不尽.与Cortex在某些操作方式上的异同,让自己对Cor ...

  8. MySQL 操作详解

    MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...

  9. Hadoop深入学习:MapTask详解

    转自:http://flyingdutchman.iteye.com/blog/1878775#bc2337280 Hadoop深入学习:MapTask详解 博客分类: Hadoop MapTask执 ...

随机推荐

  1. 【leetcode】Anagrams (middle)

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  2. java获得本机IP,名称等

    import java.net.InetAddress; import java.net.UnknownHostException; public class GetLocalIP { public ...

  3. [SQL Server]如何快速查找使用了某个字段的所有存储过程

    [SQL Server]如何快速查找使用了某个字段的所有存储过程       当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我 ...

  4. Spetember 5th 2016 Week 37th Monday

    No matter how far you may fly, never forget where you come from. 无论你能飞多远,都别忘了你来自何方. Stay true to you ...

  5. HTTP1.0和HTTP1.1的主要区别是

    HTTP/.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象 HTTP/.1默认使用持久连接(然而,HTTP/.1协议的客户机和服务器可以配置成使用非持久连接)在持久连接下, ...

  6. gitlab 用户头像不能显示的问题

    [root@GitLab assets]# cat /etc/gitlab/gitlab.rb # Change the external_url to the address your users ...

  7. jquery学习笔记-----ajax

    $(selector).load( url [,date] [,callback] ) url:请求页面的url地址 date:发送至服务器的key:value数据 callback:请求完成时的回调 ...

  8. Java Eclipse进行断点调试

    如何调试Java程序? 大家最开始学习Java,都会觉得IDE调试好高端有木有,其实很简单了. 下文会尽量简单直观的教会你在Eclipse中调试,其他的IDE调试步骤也是类似的. 1.在你觉得有错的地 ...

  9. Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

  10. 【JAVA多线程概述】

    一.多线程概述 一个进程中至少有一个线程,每一个线程都有自己运行的内容,这个内容可以称为线程要执行的任务. 不能没一个问题都使用多线程,能使用单线程解决的问题就不要使用多线程解决. 使用多线程的弊端: ...