高级查询选项

//简单查询
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. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  2. phpexcel生成excel并下载

    Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...

  3. 【leetcode】Valid Sudoku (easy)

    题目:就是判断已有的数字是否冲突无效,若无效返回flase 有效返回true 不要求sudo可解 用了char型的数字,并且空格用‘.'来表示的. 思路:只要分别判断横向 竖向 3*3小块中的数字是否 ...

  4. 加载ComboBox控件

    /// <summary> /// 加载公司 /// </summary> /// <param name="cbbCompany">Combo ...

  5. osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标

    class MyNodeVisitor:public osg::NodeVisitor { pulic: MyNodeVisitor():osg::NodeVisitor(osg::NodeVisit ...

  6. [Android ] linux命令英文缩写的含义(方便记忆)

    du -sh */ reference to : http://blog.chinaunix.net/uid-27164517-id-3299073.html linux常用命令的英文单词缩写 命令缩 ...

  7. HttpClient 3.X 4.3 4.x超时设置

    HttpClient 4.3.HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样, 3.X是这样的 ...

  8. Delphi多线程开发注意事项

    Q1: 多线程中需避免多个线程同时向全局变量进行写入操作,导致访问冲突问题. A1:  可以通过使用加锁机制(比如:临界区.互斥.信号量)解决此问题. Q2:多线程中对于结构体和CLASS类型的全局变 ...

  9. [javascript] 使用闭包编写模块

    这是一篇[javascript the good parts]的读书笔记. 我们知道可以利用javascript 的prototype 特性为原始类型编写拓展模块.利用如下方法: Object.pro ...

  10. memcpy与memmove的区别

    在面试中经常会被问道memcpy与memove有什么区别? 整理如下: 其实主要在考C的关键字:restrict C库中有两个函数可以从一个位置把字节复制到另一个位置.在C99标准下,它们的原型如下: ...