Mongodb查询记录
下一篇: 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(), 你可能得不到游标里的数据. 所以要明确的锁定你要查询的游标.
下一篇: Mongodb条件查询