db.collection.findOne() שיטה מחזירה רק מסמך אחד שמקיים את ה קריטריונים שהוזנו. אם הקריטריונים המוזנים תואמים ליותר ממסמך אחד, השיטה תחזיר רק מסמך אחד לפי הסדר הטבעי, המשקף את הסדר שבו המסמכים מאוחסנים במסד הנתונים.
MongoDB findOne
MongoDB findOne() בתחביב הוא:
db.collection.findOne(<criteria>, <projection>)
criteria – מציין את הקריטריונים שהוזנו. projection – מציין את רשימת השדות שיש להציג במסמך שמוחזר. כמה נקודות חשובות על findOne של MongoDB:
- הפרמטר של ה projection מקבל ערכים בוליאניים של 1 או true, 0 או false. אם שדות ה projection לא מוגדרות, יוחזרו כל השדות.
- MongoDB findOne() תמיד כוללת את השדה _id גם אם לא צוין באופן פורמלי בפרמטר ה projection, אלא אם כן הוא מופעל.
- MongoDB findOne() מחזירה רק מסמך אחד ולא את המחזיק.
מצא את מונגו – מפרט שאילתה ריק
הפעולה הזו מחזירה מסמך יחיד מהאוסף המצויין. לדוגמה, db.car.findOne()
פלט:
{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}
נמצא רק רשומה אחת מאוסף הרכב car
. שים לב ש-"פולו" הוכנס ראשון למסד הנתונים.
מצא את מונגו – מפרט שאילתה
פעולת findOne במונגו מחזירה את המסמך הראשון שתואם מהאוסף המצויין יחד עם הקריטריונים שהוזנו. לדוגמה:
>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )
{
"_id" : ObjectId("546cb92393f464ed49d620db"),
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67,
"mfdcountry" : "Rome"
}
הפעולה מחפשת את הרכב בשם "זן" או במהירות גדולה מ-60 ומחזירה את המסמך הראשון המקיים את הקריטריונים שהוזנו מאוסף הרכב.
הצגה במונגו findOne()
הפרמטר הצגה חל גם על שיטת findOne במונגו. בואו נסתכל על כמה תרחישים בהם אפשר להשתמש בהצגה בfindOne.
findOne ב-MongoDB – ציון השדות שיש להחזיר
פעולה זו מציגה רק את השדות המצויינים בשאילתה. לדוגמה:
>db.car.findOne(
... { },
... {name:1,color:1}
... )
{ "_id" : 2, "name" : "Polo", "color" : "White" }
המסמך הראשון מאוסף הרכבים עם המזהה, השם והצבע מוצגים.
findOne ב-MongoDB – החזרת כל השדות חוץ מהשדה המוחלט
פעולה זו משיגה את המסמך הראשון ללא השדות המצויינים בקריטריוני הבחירה. לדוגמה;
>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )
{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }
שם הרכב של וולקסווגן משגיחים עליו ומתעלמים מהמזהה, מדינת יצור ומס' הלקוחות.
מסמך תוצאת findOne ב-MongoDB
שיטות הסמן לא יעבדו בפעולה זו מאחר והשיטה מחזירה רק מסמך יחיד. כדי להדפיס את ערכי השדות האישיים מהמסמך, ניתן להשתמש בקוד הבא.
>var car = db.car.findOne();
> if (car) {
... var carName = car.name;
... print (tojson(carName));
... }
"Polo"
זה משיג רק את שם הרכב "פולו".
דוגמת חיפוש findOne של MongoDB ב-Java
להלן התוכנית ב-Java המציגה אפשרויות שונות שניתן להשתמש בהן עם findOne של MongoDB. 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");
// משתמשים ב-n כבסיס נתונים, השתמשו בבסיס הנתונים שלכם כאן
DB db = mongoClient.getDB("test");
// משיגים את אובייקט האוסף, כאן משמש רכב, השתמשו בשלכם
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");
// קריטריוני סינון עבור שם רכב פולקסווגן
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
זהו כל הדבר בנוגע לשיטת findOne() של MongoDB, נבחן אפשרויות נוספות ב־MongoDB בפוסטים הבאים. הפניה: מסמך רשמי
Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example