במאמר הקודם למדנו איך משתמשים במתודת find כדי לחפש ערכים מדויקים (למשל שם), לחפש שם "דומה" כמו LIKE ב-MySQL או לחפש ערך מספרי גדול מ:. אנחנו נמשיך לחקור את find. על מנת להתאמן בשאילתות יצרנו collection עם מאה documents באופן פשוט וקל.
אז אם במאמר הקודם חיפשתי לקוחות שהערך של ה-value שלהם הוא גדול מ-95, אתם בוודאי יכולים להניח שעל מנת לחפש לקוחות שהערך שלהם קטן מ-95 אני צריך להשתמש ב:
db.clients.find({value: {$lt:95}})
אם gt משמעו Greater Than אז lt משמעו Less Than.
שילוב של שני תנאים הוא קל ופשוט, למשל אם אני רוצה לחפש את כל הלקוחות שהערך שלהם הוא בין 5ל-10, אני חייב לשלב את שני התנאים. במקרה הזה זה יראה כך:
db.clients.find({value: {$lt:10,$gt:5}})
זה בנוגע לתא אחד, אבל אני יכול לשלב כמובן – נניח שאני רוצה גם לקוחות שהערך שלהם הוא בין 5 ל-10 וגם שהשם שלהם יהיה כולל את האות a למשל? בדיוק כפי שהאופרטור AND משמש אותנו ב-MySQL.
db.clients.find({name: /a/ ,value: {$lt:10,$gt:5}})
חשוב להבין שמדובר בתנאי AND. כלומר התוצאות כוללות אך ורק document שהערך שלהם הוא בין 5 ל-10 וגם כאלו שיש להם a בשם.
ואם אני רוצה OR? כלומר או document עם ערך שבין 5 ל-10 או כאלו שיש להם a בשם? במקרה הזה הסינטקט משתנה. אני מעביר באובייקט את התכונה or$. התכונה היא מערך שכל אבר במערך הזה הוא בעצם תנאי OR. ככה זה נראה:
db.clients.find({
$or: [{
value: {
$lt: 10,
$gt: 5
}
}, {
name: /a/
}]
})
אני יכול להעביר כמה תנאי OR שאני רוצה כמובן. כל תנאי הוא איבר במערך or$. אני יכול לשלב גם AND ו-or כמובן באופן הזה:
db.clients.find({
x: {
$lt: 24
},
$or: [{
value: {
$lt: 10,
$gt: 5
}
}, {
name: /a/
}]
})
מה קורה פה? מההתחלה: ראשית db, שהוא מסד הנתונים שבו אני משתמש. שנית, שם ה-collection שלי שהוא clients. ועכשיו מתודת find שמקבל את אובייקט החיפוש שלי. האובייקט הוא בעצם תנאי רגיל שהוא – תביאו לי רק X מתחת ל-24 ומתוך כולם הם צריכים להיות בין 5 ל-10 או עם האות a בשם.
מבולבלים? לא נורא. במקרה הזה מדובר בשאילתה מאוד מסובכת וקצת תיאורטית. אתם יכולים להתנחם בזה שהחגיגה מתחילה כאשר אנו מדברים על אובייקטים יותר מורכבים, אבל דיה לצרה בשעתה. נכון לעכשיו אתם ��מורים לדעת איך שולפים נתונים באמצעות find ואיך משתמשים בתנאי OR או AND. אם אתם צריכים הסברים ודוגמאות נוספות – שווה מאוד להציץ בדוקומנטציה הרלוונטית והבהירה מאוד של MongoDB.
זה הכל! במאמר הבא אנחנו נדבר על שליפות נתונים מתקדמות עם MongoDB: איך עושים sorting, projection ו-limit
3 תגובות
"תביאו לי רק X מתחת ל-24 ומתוך כולם הם צריכים להיות בין 5 ל-10 ועם האות a בשם."
הכוונה לא ל
תביאו לי רק X מתחת ל-24 ומתוך כולם הם צריכים להיות בין 5 ל-10 או עם האות a בשם?
כלומר במקום "ועם" שיהיה "או עם" ?
שרון, ראיתי אז זה בדיוק כמוך.
גם ממה שאני הבנתי בשאילתה יש "או" לכן זה מספיק שיהיה בין 5 ל-10 או עם האות a בשם, לא חייב את שניהם.
צודקים, זו טעות סופר ותודה על התיקון 🙂