mongodb操作:利用javaScript封装db.collection.find()后可调用函数源码解读
{
"_mongo" : connection to YOURIP:27017{ SSL: { sslSupport: false, sslPEMKeyFile: "" } }{ SSH: { host: "", port: 22, user: "", password: "", publicKey: { publicKey: "", privateKey: "", passphrase: "" }, currentMethod: 0 } },
"_db" : mazhan_log,
"_collection" : YOURCOLLECTION,
"_ns" : "YOURCOLLECTION",
"_query" : { },
"_fields" : null,
"_limit" : 0,
"_skip" : 0,
"_batchSize" : 0,
"_options" : 0,
"_cursor" : { },
"_numReturned" : 50,
"_special" : false,
"_cursorSeen" : 50,
"help" : function () {
print("find() modifiers");
print("\t.sort( {...} )");
print("\t.limit( n )");
print("\t.skip( n )");
print("\t.count() - total # of objects matching query, ignores skip,limit");
print("\t.size() - total # of objects cursor would return, honors skip,limit");
print("\t.explain([verbose])");
print("\t.hint(...)");
print("\t.addOption(n) - adds op_query options -- see wire protocol");
print("\t._addSpecial(name, value) - http://dochub.mongodb.org/core/advancedqueries#AdvancedQueries-Metaqueryoperators");
print("\t.batchSize(n) - sets the number of docs to return per getMore");
print("\t.showDiskLoc() - adds a $diskLoc field to each returned object");
print("\t.min(idxDoc)");
print("\t.max(idxDoc)");
print("\nCursor methods");
print("\t.toArray() - iterates through docs and returns an array of the results");
print("\t.forEach( func )");
print("\t.map( func )");
print("\t.hasNext()");
print("\t.next()");
print("\t.objsLeftInBatch() - returns count of docs left in current batch (when exhausted, a new getMore will be issued)");
print("\t.count(applySkipLimit) - runs command at server");
print("\t.itcount() - iterates through documents and counts them");
},
"clone" : function () {
var q = new DBQuery(this._mongo, this._db, this._collection, this._ns, this._query, this._fields, this._limit, this._skip, this._batchSize, this._options);
q._special = this._special;
return q;
},
"_ensureSpecial" : function () {
if (this._special) {
return;
}
var n = {query:this._query};
this._query = n;
this._special = true;
},
"_checkModify" : function () {
if (this._cursor) {
throw "query already executed";
}
},
"_exec" : function () {
if (!this._cursor) {
assert.eq(0, this._numReturned);
this._cursor = this._mongo.find(this._ns, this._query, this._fields, this._limit, this._skip, this._batchSize, this._options);
this._cursorSeen = 0;
}
return this._cursor;
},
"limit" : function (limit) {
this._checkModify();
this._limit = limit;
return this;
},
"batchSize" : function (batchSize) {
this._checkModify();
this._batchSize = batchSize;
return this;
},
"addOption" : function (option) {
this._options |= option;
return this;
},
"skip" : function (skip) {
this._checkModify();
this._skip = skip;
return this;
},
"hasNext" : function () {
this._exec();
if (this._limit > 0 && this._cursorSeen >= this._limit) {
return false;
}
var o = this._cursor.hasNext();
return o;
},
"next" : function () {
this._exec();
var o = this._cursor.hasNext();
if (o) {
this._cursorSeen++;
} else {
throw "error hasNext: " + o;
}
var ret = this._cursor.next();
if (ret.$err && this._numReturned == 0 && !this.hasNext()) {
throw "error: " + tojson(ret);
}
this._numReturned++;
return ret;
},
"objsLeftInBatch" : function () {
this._exec();
var ret = this._cursor.objsLeftInBatch();
if (ret.$err) {
throw "error: " + tojson(ret);
}
return ret;
},
"readOnly" : function () {
this._exec();
this._cursor.readOnly();
return this;
},
"toArray" : function () {
if (this._arr) {
return this._arr;
}
var a = [];
while (this.hasNext()) {
a.push(this.next());
}
this._arr = a;
return a;
},
"count" : function (applySkipLimit) {
var cmd = {count:this._collection.getName()};
if (this._query) {
if (this._special) {
cmd.query = this._query.query;
} else {
cmd.query = this._query;
}
}
cmd.fields = this._fields || {};
if (applySkipLimit) {
if (this._limit) {
cmd.limit = this._limit;
}
if (this._skip) {
cmd.skip = this._skip;
}
}
var res = this._db.runCommand(cmd);
if (res && res.n != null) {
return res.n;
}
throw "count failed: " + tojson(res);
},
"size" : function () {
return this.count(true);
},
"countReturn" : function () {
var c = this.count();
if (this._skip) {
c = c - this._skip;
}
if (this._limit > 0 && this._limit < c) {
return this._limit;
}
return c;
},
"itcount" : function () {
var num = 0;
while (this.hasNext()) {
num++;
this.next();
}
return num;
},
"length" : function () {
return this.toArray().length;
},
"_addSpecial" : function (name, value) {
this._ensureSpecial();
this._query[name] = value;
return this;
},
"sort" : function (sortBy) {
return this._addSpecial("orderby", sortBy);
},
"hint" : function (hint) {
return this._addSpecial("$hint", hint);
},
"min" : function (min) {
return this._addSpecial("$min", min);
},
"max" : function (max) {
return this._addSpecial("$max", max);
},
"showDiskLoc" : function () {
return this._addSpecial("$showDiskLoc", true);
},
"readPref" : function (mode, tagSet) {
var readPrefObj = {mode:mode};
if (tagSet) {
readPrefObj.tags = tagSet;
}
return this._addSpecial("$readPreference", readPrefObj);
},
"forEach" : function (func) {
while (this.hasNext()) {
func(this.next());
}
},
"map" : function (func) {
var a = [];
while (this.hasNext()) {
a.push(func(this.next()));
}
return a;
},
"arrayAccess" : function (idx) {
return this.toArray()[idx];
},
"comment" : function (comment) {
var n = this.clone();
n._ensureSpecial();
n._addSpecial("$comment", comment);
return this.next();
},
"explain" : function (verbose) {
var n = this.clone();
n._ensureSpecial();
n._query.$explain = true;
n._limit = Math.abs(n._limit) * -1;
var e = n.next(); function cleanup(obj) {
if (typeof obj != "object") {
return;
}
delete obj.allPlans;
delete obj.oldPlan;
if (typeof obj.length == "number") {
for (var i = 0; i < obj.length; i++) {
cleanup(obj[i]);
}
}
if (obj.shards) {
for (var key in obj.shards) {
cleanup(obj.shards[key]);
}
}
if (obj.clauses) {
cleanup(obj.clauses);
}
} if (!verbose) {
cleanup(e);
}
return e;
},
"snapshot" : function () {
this._ensureSpecial();
this._query.$snapshot = true;
return this;
},
"pretty" : function () {
this._prettyShell = true;
return this;
},
"shellPrint" : function () {
try {
var start = (new Date).getTime();
var n = 0;
while (this.hasNext() && n < DBQuery.shellBatchSize) {
var s = this.next();
print(s);
n++;
}
if (typeof _verboseShell !== "undefined" && _verboseShell) {
var time = (new Date).getTime() - start;
print("Fetched " + n + " record(s) in " + time + "ms");
}
if (this.hasNext()) {
___it___ = this;
} else {
___it___ = null;
}
} catch (e) {
print(e);
}
},
"toString" : function () {
return "DBQuery: " + this._ns + " -> " + tojson(this._query);
}
}
先带源码裸奔, 解读注释部分随后补充。
其实js代码很好读的,嘿嘿!!!
mongodb操作:利用javaScript封装db.collection.find()后可调用函数源码解读的更多相关文章
- 【JavaScript游戏开发】使用HTML5+Canvas+JavaScript 封装的一个超级马里奥游戏(包含源码)
这个游戏基本上是建立在JavaScript模块化的开发基础上进行封装的,对游戏里面需要使用到的游戏场景进行了封装,分别实现了Game,Sprite,enemy,player, base,Animati ...
- Alamofire源码解读系列(九)之响应封装(Response)
本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...
- node.js连接MongoDB数据库,db.collection is not a function完美解决
解决方法一. mongodb数据库版本回退: 这个错误是出在mongodb的库中,在nodejs里的写法和命令行中的写法不一样,3.0的api已经更新和以前的版本不不一样,我们在npm中没指定版本号的 ...
- mongodb初始化并使用node.js实现mongodb操作封装
mongodb的下载只要在https://www.mongodb.com/网站就能够下载 下载后安装只用一直点next就可以,注意最好使用默认路径安装到C盘,然后在任意位置建立一个文件夹用于储存你的数 ...
- 支持Json进行操作的Javascript类库TAFFY DB
前段时间工作中用到Json数据,希望将一些简单的增删改查放到客户端来做,这样也能减少服务器端的压力.分别查找了几个可以对Json进行操作的javascript 类库,最终选定了TAFFY DB.原因如 ...
- mongoDB数据库插入数据时报错:db.collection is not a function
nodejs连接mongodb插入数据时,发现mongoDB报错:db.collection is not a function.解决方法: 1.npm下载mongodb2.x.x版本替换3.x.x ...
- mongodb的db.collection is not function
mongodb的3.0版本之前: 如2.3版本,可以直接使用db调用collection来操作数据 但在3.0版本以上,会报错:db.collection is not a function 3.0版 ...
- jdbc操作mysql(四):利用反射封装
前言 有了前面利用注解拼接sql语句,下面来看一下利用反射获取类的属性和方法 不过好像有一个问题,数据库中的表名和字段中带有下划线该如何解决呢 实践操作 工具类:获取connection对象 publ ...
- jdbc操作mysql(三):利用注解封装
案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...
随机推荐
- RH253读书笔记(4)-Lab 4 The Domain Name System
Lab 4 The Domain Name System Goal: To install and configure a DNS server System Setup: Throughout th ...
- C语言easy忽视的细节(第四部分)
前言:本文的目的是记录C这些语言easy忽视的细节.我会每天花一点时间来阅读整理,坚持下去,今天是第一章.也许今天是下个月的第二,明年,今天是第几?--我坚信,,记性不如烂笔头.第四篇了.fight~ ...
- 阿里云OSS Multipart Upload上传实例
原来是用的PutObject()方式上传文件的,但是当文件比较大的时候,总是报一个对方强制关闭连接导致上传失败.PS:公司的网比较渣,10MB的文件都传不上去,搜了下,说使用Multipart Upl ...
- 视频和音频播放的演示最简单的例子6:OpenGL广播YUV420P(T经exture,采用Shader)
===================================================== 最简单的视频和音频播放的演示样品系列列表: 最简单的视音频播放演示样例1:总述 最简单的视音 ...
- JS它DOM
DOM:document object model.文档对象模型.它主要由许多节点.而基于JS对象的一切视角,DOM核心是节点对象和操作方法的属性.从下面三方面来介绍DOM. 一.节点查找与操作 这部 ...
- Docker简介(转)
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- hdu 3683 Gomoku (模拟、搜索)
Gomoku Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- uva 592 Island of Logic (收索)
Island of Logic The Island of Logic has three kinds of inhabitants: divine beings that always tel ...
- CSDN markdown 编辑 第五章 UML
这里大概只能产生两种类型的图: 序列图 框图 序列图 ```sequence A->B: 一句话证明你非常寂寞. Note right of B: thinking B->B: count ...
- Visual FoxPro 6.0~9.0解决方案和实例文档和CD写入原件下载
自从微软宣布开发冻结Visual FoxPro之后,这样的图书出版已经成为一个问题,但仍有不少VFP小贴士.处处留心此8历史书.在此提供写作的原稿.它看起来非常舒服比扫描版淘宝.下载链接:http:/ ...