Mongodb查询记录

Posted by 撒得一地 on 2016年3月28日 in Mongodb教程

语法

MongoDB 查询数据的语法格式如下:

>db.COLLECTION_NAME.find()

find() 方法以非结构化的方式来显示所有文档。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

>db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

实例,分别用find()方法进行实例查询:

>db.test.find()
{"_id":ObjectId("4c2209f9f3924d31102bd84a"),"name":"psz"}
{"_id":ObjectId("4c2209f9f3924d31102bd84b"),"name":"psz2"}

游标方式输出

除了上面的例子,还可以通过游标的方式或结合 while 来输出:

> var cursor = db.things.find();
> while (cursor.hasNext()) printjson(cursor.next());
{"_id":ObjectId("4c2209f9f3924d31102bd84a"),"name":"psz"}
{"_id":ObjectId("4c2209f9f3924d31102bd84b"),"name":"psz2"}

上面的例子显示了游标风格的迭代输出. hasNext() 函数告诉我们是否还有数据, 如果有则可以调用 next() 函数。

在 MongoDB shell 里, 我们也可以把游标当作数组来用:

> var cursor = db.things.find();
> printjson(cursor[1])
{"_id":ObjectId("4c2209f9f3924d31102bd84b"),"name":"psz2"}

forEach方式输出

当我们使用的是 JavaScript shell, 可以用到 JS 的特性, forEach 就可以输出游标了。 下面的例子就是使用 forEach() 来循环输出: forEach() 必须定义一个函数供每个游标元素调用。如:

> db.test.find().forEach(printjson);
{"_id" : ObjectId("4c2209f9f3924d31102bd84a"),"name" : "psz"}
{"_id" : ObjectId("4c2209f9f3924d31102bd84b"),"name" : "psz2"}

上面就是通过forEach返回游标,然后再通过printjson函数输出游标。

使用游标时候请注意占用内存的问题, 特别是很大的游标对象, 有可能会内存溢出。 所以应该用迭代的方式来输出. 下面的示例则是把游标转换成真实的数组类型:

> var arr = db.test.find().toArray();
> arr[1];
{"_id" : ObjectId("4c2209f9f3924d31102bd84b"),"name" : "psz2"}

请注意上面关于游标的这些特性只是在 MongoDB shell 里使用, 而不是所有的其他应用程序驱动都支持。

MongoDB 游标对象没有快照,如果有其他用户在集合里第一次或者最后一次调用next(), 你可能得不到游标里的数据. 所以要明确的锁定你要查询的游标.

本文地址:http://coderschool.cn/1755.html

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.