日期:2014-05-16 浏览次数:20450 次
?
MongoDB ?实战笔记
?
count 查询记录条数
db.users.find().count();?
?
以下返回的不是 5,而是 user 表中所有的记录数量
db.users.find().skip(10).limit(5).count();?
?
如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)?
db.users.find().skip(10).limit(5).count(true);
?
?
从第 3 条记录开始,返回 5 条记录(limit 3, 5)?
db.users.find().skip(3).limit(5);
?
以年龄升序 asc?
db.users.find().sort({age: 1});?
以年龄降序 desc?
db.users.find().sort({age: -1});
?
MongoDB 也是用游标来循环处理每一条结果数据,具体语法如
下:
> for( var c = db.t3.find(); c.hasNext(); ) {?
... ? ?printjson( c.next());?
... }
MongoDB 还有另一种方式来处理游标
> db.t3.find().forEach( function(u) { printjson(u); } );
?
MongoDB 同样支持存储过程。关于存储过程你需要知道的第一件事就是它是用 javascript 来
写的。也许这会让你很奇怪,为什么它用 javascript 来写,但实际上它会让你非常满意,
MongoDB 存储过程是存储在 db.system.js 表中的,我们想象一个简单的 sql 自定义函数如下:
function addNumbers( x , y ) {?
? ? return x + y;?
}
下面我们将这个 sql 自定义函数转换为 MongoDB 的存储过程:?
> db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});
调用一下这个存储过程:?
> db.eval('addNumbers(3, 4.2)');?
7.2
?
db.eval()是一个比较奇怪的东西,我们可以将存储过程的逻辑直接在里面并同时调用,而无
需事先声明存储过程的逻辑。
> db.eval( function() { return 3+3; } );?
6
?
1、logging?
MongoDB 中日志机制的首选,MongoDB 没有使用日志文件,而是把日志事件存储在数
据库中。在一个没有索引的 capped collection 中插入对象的速度与在文件系统中记录日
志的速度相当。
2、cache?
缓存一些对象在数据库中,比如计算出来的统计信息。这样的需要在 collection 上建立
一个索引,因为使用缓存往往是读比写多。
3、auto archiving?
可以利用 capped collection 的 age-out 特性,省去了写 cron 脚本进行人工归档的工作
?
1、 为了发挥 capped collection 的最大性能,如果写比读多,最好不要在上面建索引,否则
插入速度从"log speed"降为"database speed"。
2、使用"nature ordering"可以有效地检索最近插入的元素,因为 capped collection 能够保证
自然排序就是插入时的顺序,类似于 log 文件上的 tail 操作。
?
删除MongoDB Windows服务
>mongod.exe --remove
(http://blog.csdn.net/xiaochunyong/article/details/7730841)
?
mongofiles put testfile
mongofiles list
?
db.fs.files.find()
{ "_id" : ObjectId("4fc60175c714c5d960fff76a"), "filename" : "testfile", "chunkSize" : 262144,?
"uploadDate" : ISODate("2012-05-30T11:16:05.745Z"), "md5" :?
"8addbeb77789ae6b2cb75deee30faf1a", "length" : 16 }
?