MongoDB的findOne()方法仅返回满足输入条件的一个文档。如果输入的条件匹配多个文档,该方法将根据自然排序仅返回一个文档,反映了文档在数据库中存储的顺序。
MongoDB findOne
MongoDB findOne()的语法是:
db.collection.findOne(<criteria>, <projection>)
criteria – 指定输入的选择条件。projection – 指定在返回的文档中显示的字段列表。关于MongoDB findOne的一些重要点:
- projection参数接受布尔值1或true,0或false。如果未指定投影字段,则将检索所有字段。
- MongoDB findOne()总是包含_id字段,即使在投影参数中没有明确指定,除非它被排除。
- MongoDB findOne()仅返回一个文档而不是游标。
MongoDB findOne – 空查询规范
该操作从指定的集合中返回单个文档。例如,db.car.findOne()
输出:
{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}
从car
集合中检索到一条记录。请注意,“Polo”首先被插入到数据库中。
MongoDB findOne – 查询规范
此 MongoDB findOne 操作从指定的集合中返回与输入的选择条件匹配的第一个文档。例如:
>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )
{
"_id" : ObjectId("546cb92393f464ed49d620db"),
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67,
"mfdcountry" : "Rome"
}
此操作搜索名称为“Zen”的汽车或速度大于60的汽车,并从汽车集合中检索满足输入条件的第一个文档。
MongoDB findOne() 中的投影
投影参数也适用于 MongoDB findOne 方法。让我们看一些可以在 findOne 中使用投影的场景。
MongoDB findOne – 指定要返回的字段
此操作仅显示查询中指定的字段。例如:
>db.car.findOne(
... { },
... {name:1,color:1}
... )
{ "_id" : 2, "name" : "Polo", "color" : "White" }
显示具有 id、name 和 color 字段的 Car 集合中的第一个文档。
MongoDB findOne – 返回除指定字段之外的所有字段
此操作检索第一个文档,排除选择条件中指定的字段。例如:
>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )
{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }
检索车辆名称为 Volkswagen 的记录,但排除 id、mfdcountry 和 cno 字段。
MongoDB findOne 结果文档
在此操作中,游标方法将不起作用,因为该方法仅返回单个文档。为了打印文档中的各个字段值,我们可以使用下面的代码。
>var car = db.car.findOne();
> if (car) {
... var carName = car.name;
... print (tojson(carName));
... }
"Polo"
这将仅检索汽车名称为“Polo”的记录。
MongoDB findOne Java示例
以下是显示可以与MongoDB findOne()一起使用的不同选项的Java程序。MongoDBFindOne.java
package com.journaldev.mongodb;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.net.UnknownHostException;
public class MongoDBFindOne {
//方法在没有任何条件的情况下检索第一个文档
public static void emptyFindOne() throws UnknownHostException {
//获取到运行的数据库的新连接
MongoClient mongoClient = new MongoClient("localhost");
//使用test作为数据库,在此处使用您自己的数据库
DB db = mongoClient.getDB("test");
//获取集合对象,此处使用car,请使用您自己的对象
DBCollection coll = db.getCollection("car");
//调用findOne()方法
DBObject doc = coll.findOne();
//打印结果文档
System.out.println(doc);
}
//根据选择条件检索文档的方法
public static void querySpecification() throws UnknownHostException {
//每次都不需要获取连接(可以一次完成
// globally).
MongoClient mongoClient = new MongoClient("localhost");
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("car");
//查询以根据名称和速度值过滤文档
//创建新对象
DBObject query = new BasicDBObject("name", "Zen").append("speed",
new BasicDBObject("$gt", 30));
//通过满足条件获取的结果文档
DBObject d1 = coll.findOne(query);
//在控制台上打印文档
System.out.println(d1);
}
public static void projectionFields() throws UnknownHostException {
MongoClient mongoClient = new MongoClient("localhost");
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("car");
//创建新的db对象
BasicDBObject b1 = new BasicDBObject();
//仅显示结果中的名称和颜色字段的条件
// document
BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);
//通过接受字段和对象检索文档的方法
// criteria
DBObject d1 = coll.findOne(b1, fields);
System.out.println(d1);
}
public static void excludeByfields() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection col = db.getCollection("car");
//筛选条件为car名称为volkswagen
DBObject query = new BasicDBObject("name", "Volkswagen");
//排除mfdcountry、cno和id字段
BasicDBObject fields = new BasicDBObject("mfdcountry", 0).append("cno",
0).append("_id", 0);
DBObject d1 = col.findOne(query, fields);
System.out.println(d1);
}
public static void printDoc() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection col = db.getCollection("car");
DBObject d1 = col.findOne();
//仅打印车辆的名称
System.out.println((d1.get("name")));
}
public static void main(String[] args) throws UnknownHostException {
//从主方法调用所有方法
emptyFindOne();
querySpecification();
projectionFields();
excludeByfields();
printDoc();
}
}
程序的输出是:
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White" , "cno" : "H411" , "speed" : 45.0 , "mfdcountry" : "Japan"}
{ "_id" : { "$oid" : "546cb92393f464ed49d620db"} , "name" : "Zen" , "color" : "JetRed" , "cno" : "H671" , "speed" : 67 , "mfdcountry" : "Rome"}
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White"}
{ "name" : "Volkswagen" , "color" : "JetBlue" , "speed" : 62}
Polo
这就是 MongoDB findOne() 方法的全部内容,我们将在接下来的文章中深入探讨更多 MongoDB 的选项。参考:官方文档
Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example