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集合 ...
随机推荐
- 基于HTML5气3D仿真培训系统
根据最近的上线HTML5的燃气3D培训仿真系统.曾经的老系统是採用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但由于这次新产品需求要求能 ...
- unity3d 各功能的运行秩序,打回来,订购,的次数
Update 当MonoBehaviour启用时,其Update在每一帧被调用. 仅调用一次(每帧) LateUpdate 当Behaviour启用时, 每帧调用一次: FixedUpdate 当M ...
- Java于 初始化序列?
我们正处于java于 Java中初始化的顺寻? java代码: package sru.love.c; class Person { String name = "Person"; ...
- 非阻塞IOserver型号
让我们来考虑一个场景,你和百万玩家的魔兽世界的忠实粉丝.时间之旅打每到周末boss. 每当周末比赛server在亚历山大,因为至少在同一时间数十万用户在线. 假设我们的多-threaded果酱serv ...
- MVC的验证 jquery.validate.unobtrusive
jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js) 2013-07-22 19:07 4568人阅 ...
- Tempdb怎么会成为性能瓶颈
原文:Tempdb怎么会成为性能瓶颈 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/25/tempdb.aspx 我曾经遇到过这样一个性能问题. ...
- C#名单:一个简单的实现
C#它配备了一个泛型列表类,在很多情况下,足以.实际应用中遇到.最好的报价C#该链表,包装成自己的阶级需求. 该名单的努力的原则,基本实现探索实施一些简单的方法. 一个.(Node.cs文件)作为一类 ...
- HDOJ--4821--String【弦hash】
联系:http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给一个字符串,选m个长度为l的子串组成新的串.要求这m个子串互不同样,问有多少种组合. 字符串 ...
- jquery-ui-bootstrap动态添加和删除标签页封装【效果更炫】
1.效果图 2.导入js和css <link rel="stylesheet" href="css/bootstrap/css/bootstrap.min.css& ...
- RTP 记录 log 该机制
我们 RCV 在这里,经常跑concurrent request RTP: Receiving Transaction Processor, 它主要是用来处理 RCV_TRANSACTIONS_INT ...