במאמר הקודם למדנו איך משתמשים במתודת 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 בשם, לא חייב את שניהם.
צודקים, זו טעות סופר ותודה על התיקון 🙂