MongoDB中使用find来进行查询。查询就是返回一个集合中文档的子集,子集的范围从0个文档到整个集合。find的第一个参数指定了要返回哪些文档,这个参数是一个文档,用于指定查询条件。

为了便于理解,本文中所有的例子都会提供SQL语句的对比,必要时会与关系型数据库MySQL进行对比。
本文假设:集合(表)名为users
代码中涉及查询以“>”开头表示是一个查询语句,其他表示查询结果。

查询全部

空的查询会匹配集合的全部内容,下面查询会返回users集合中所有的内容。

> db.users.find()

对比SQL语句

> SELECT * FROM `users`;

指定查询条件

如果要指定查询条件
例如查询所有年龄为27岁的记录:

> db.users.find({"age":27})

对比SQL语句

> SELECT * FROM `users` WHERE `age` = 27;

如果要指定多个查询条件
例如查询所有年龄为27岁,并且 blog 为 https://www.ipaddr.host 的记录:

> db.users.find({"age" : 27 , "blog" : "https://www.ipaddr.host"})

对比SQL语句

> SELECT * FROM `users` WHERE `age` = 27 AND `blog` = "https://www.ipaddr.host";

指定需要返回的键

上面介绍到的查询,是把文档中所有的键值都返回。但有时我们并不希望返回所有的键值,遇到这种情况我们可以通过find的第二个参数来指定想要的键。这样做既会节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。

例如,我们只对用户的名字和blog地址感兴趣,可以使用下面查询返回这些键。
第二个参数中,可以理解为:1=true 0=false

> db.users.find({}, {"username" : 1 , "blog" : 1})
{
    "_id" : ObjectId("57e8b143a4a6a5a106209e5f"),
    "username" : "Internelp",
    "blog" : "https://www.ipaddr.host"
}

对比SQL语句

SELECT `username`, `blog` FROM `users`;

MySQL不同,默认情况下"_id"这个键总是被返回,即使我们没有指定要返回这个键。
这个时候我们就需要用到设定"_id" = 0来把它剔除掉。

> db.users.find({}, {"_id" = 0, "username" : 1 , "blog" : 1})
{
    "username" : "Internelp",
    "blog" : "https://www.ipaddr.host"
}