mongoDB中findOne()的用法介绍
定义:db.collection.findOne
(query, projection)
返回一个文档满足指定的查询条件。如果多个文档满足查询,该方法返回第一个文档根据自然秩序反映了磁盘上文件的顺序。在限制集合,自然秩序是一样的插入顺序。如果没有文档满足查询,方法返回null。
参数 | 类型 | 描述 |
查询 | 文档 | 可选,使用查询操作符指定查询选择标准。 |
投影 | 文档 | 可选,指定的字段返回使用投影操作符。省略该参数返回匹配文档中所有字段。 |
使用投影文档的一个参数形式如下:
{field1:<boolean>,field2:<boolean>...}
<布尔>类型可以用以下包括或排除值之一:
.包括1或者正确的。这个findOne()方法永远包含了_id域甚至并没有显式地指定字段的投影参数。
.0或者错误是排除的。
当然投影参数也不能混合包括和排除规范,除了扣除_id字段外。
返回情况:
满足条件的一个文档指定为这个方法的第一个参数。如果你指定一个投影参数,那么findOne()返回一个文档,只包含了你投影的字段,_id字段总是包括的,除非你明确的排除它。
尽管find()方法和这个方法很类似,但是findOne()方法返回是一个文档为而不是游标。
举例:
以下操作返回一个文档从user集合:
db.user.findOne()
查询规范:
下面的一个操作返回了第一个匹配的文档是从user集合的字段嵌入文档中的第一个名称开头字母G或者参数不等于这个new的日期;
db.user.findOne({$or:[{‘name.first’:/^G/},
{
birth:{$lt:new Date(‘01/01/1945’)}}
]
}
)
使用投影:
投影参数指定的字段返回。参数包含包括或者排除规范,不是两个,除非排除_id字段。下面的这个操作在user中找到这个文档集合和只返回名称、contribs和id字段:
db.user.findOne(
{ },
{name:1,contribs:1}
)
返回所有且不包括的字段
下面的操作返回文档在USER集合contrib字段包含的元素OOP和返回所有字段,除了_id字段。第一个字段嵌入文档中,和birth字段;
db.user.findOne(
{ contribs:'OOP' },
{ _id:0,'name.first':0, birth:0 }
)
得到结果是文档:
无法使用游标方法得到findOne()的结果,因为是返回的一个文档,可以直接访问这个文档。此时游标是关闭的。
var myDocument = db.user.findOne();
if (myDocument) {
var myName = myDocument.name;
print (tojson(myName));
}
下面以runoob为例,附find()和findOne()方法的区别:
加入条件查询: