MongoDB findOne示例

MongoDB的findOne()方法只返回滿足輸入的條件的一個文檔。如果輸入的條件與多個文檔匹配,該方法只返回一個文檔,該文檔的順序基於自然排序,反映了文檔在數據庫中存儲的順序。

MongoDB findOne

MongoDB的findOne()語法如下:db.collection.findOne(<criteria>, <projection>) criteria – 指定輸入的選擇條件。 projection – 指定要在返回的文檔中顯示的字段列表。有關MongoDB的findOne的幾個重要點:

  1. projection參數接受布爾值1或true,0或false。如果未指定projection字段,將檢索所有字段。
  2. 無論在projection參數中是否明確指定,MongoDB的findOne()始終包含_id字段,除非它被排除在外。
  3. 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");

		// 过滤条件为车名是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 {
		// 从main方法调用所有方法
		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