דלגו לתוכן

או התחילו מנקודה בטוחה: אינדקס הכלים המלא · מפת הטבלאות המרכזיות

מערכת חדשה — 14 יום חינם

כלי נתונים

עודכן 31.08.2026

שלושה כלי קריאה (Get-Data, Count-Data, Aggregate-Data) ושלושה כלי כתיבה (Create-Data, Create-Many, Update-Data).

שולף רשומות מטבלה.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה (class name), למשל Accounts
where Object תנאי סינון. מפתחות מרובים מתחברים ב‑AND
keys Array<String> שדות להחזיר. objectId, createdAt ו‑updatedAt חוזרים תמיד. ברירת מחדל: הכול
order String שדה למיון; - ליורד, למשל -createdAt
limit Number ברירת מחדל 5, מינימום 1, מקסימום 2000. 0 / 2001 נדחים בוולידציה (Too small / Too big)
skip Number עימוד. ברירת מחדל 0
objectId String רשומה בודדת. בדיוק 10 תווים (9 נדחים). מבטל את שאר הפרמטרים
JSON
{ "table": "Accounts",
"where": { "IsAccount": false,
"createdAt": { "$gt": { "__type": "Date", "iso": "2026-08-01" } } },
"keys": ["Name", "PhoneNumber", "LeadStatusId"],
"order": "-createdAt",
"limit": 200 }

התשובה נקטמת ב‑5 בלי שגיאה. העבירו limit מפורש תמיד; לספירה Count-Data.

ב‑REST אחרת: ברירת מחדל 100, בלי תקרה נאכפת (טבלה בת 2,101 שורות, limit=5000 החזיר את כל 2,101). ראו מגבלות ומכסות.

תחביר Parse. אופרטורים: $gt, $lt, $gte, $lte, $ne, $in, $nin, $exists, $regex.

JSON
{
"IsAccount": true,
"City": { "$in": ["תל אביב", "רמת גן"] },
"Total": { "$gte": 10000 },
"ClosedAt": { "$exists": false },
"createdAt": { "$gte": { "__type": "Date", "iso": "2026-01-01T00:00:00.000Z" } },
"OwnerId": { "__type": "Pointer", "className": "_User", "objectId": "2b0QVKoigE" }
}
  1. Pointer בסינון: אובייקט מלא בלבד — {"__type":"Pointer","className":"…","objectId":"…"}. מחרוזת objectId חשופה לא תואמת דבר, בשקט (count: 0 במקום התוצאה). בטפסי web2* ההפך, שם Pointer הוא מחרוזת. ראו סוגי נתונים.
  2. תאריך: אובייקט עטוף {"__type":"Date","iso":"…"}. מחרוזת חשופה מושווית כטקסט ומחזירה 0 תוצאות, בלי שגיאה.

Pointer חוזר גם בתשובה כאובייקט מלא — {"__type":"Pointer","className":"SaleStatuses","objectId":"E9cYlAlooc"} — לא כמזהה ולא כרשומה מורחבת: אין include. לשמות במקום מזהים: Aggregate-Data עם מסלול Pointer, או שליפה נוספת.

הפרמטר קיים בסכימה החיה. אם הוא חסר ברשימת פרמטרים שראיתם במקום אחר — הסכימה שהשרת מפרסם גוברת.

JSON
{ "table": "Accounts", "objectId": "xK9mP2qRsT" }

סופר רשומות שעונות לתנאי, בלי להחזיר אותן.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה
where Object תחביר Get-Data
JSON
{ "table": "Accounts",
"where": { "IsAccount": false,
"createdAt": { "$gte": { "__type": "Date", "iso": "2026-08-01T00:00:00.000Z" } } } }

התשובה: {"count": 8}. בלי where: כל הטבלה. זול מ‑Get-Data וחסין למלכודת ה‑limit — על שאלת “כמה”, זו התשובה היחידה שאפשר לסמוך עליה.

קיבוץ וצבירה בצד השרת: שורה לכל קבוצה, במקום למשוך 12,000 שורות ולסכם בקוד.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה
group Object ✔ { "תווית": { "פונקציה": "שדה" } }. הסכימה מציינת מאפיין אחד, השרת מקבל כמה (ראו למטה)
groupby String | Object ✔ לפי מה מקבצים. בלעדיו: groupby: Invalid input: expected nonoptional
where Object סינון לפני הקיבוץ
order String לפי התווית המחושבת; - ליורד, למשל -total
limit Number ברירת מחדל 0 = כל השורות, מקסימום 2000 (2001 נדחה בוולידציה)
timeZone String לחישוב חלקי תאריך, למשל Asia/Jerusalem (hour של 10:00Z חוזר 12). ברירת מחדל: UTC של השרת

התשובה: { "results": [ { "_id": <ערך-הקיבוץ>, "<תווית>": <ערך> }, … ] }. ב‑groupby מחרוזת _id הוא הערך עצמו; ב‑groupby אובייקט _id הוא אובייקט עם התוויות שלכם.

הפונקציה מה היא עושה
sum סכום שדה, {"total":{"sum":"Total"}} · או ספירה, {"count":{"sum":1}}
avg ממוצע
min / max הנמוך / הגבוה בקבוצה
first / last הראשון / האחרון בקבוצה

first ו‑last קיימים בסכימה החיה, גם אם הם חסרים ברשימות פונקציות ישנות.

JSON
// מחרוזת — שדה אחד
{ "table": "Sales", "group": { "total": { "sum": "Total" } },
"groupby": "OwnerId._User.name", "order": "-total", "limit": 10 }
// ⇒ {"results":[{"_id":"דנה לוי","total":3600}]}
// אובייקט — כמה שדות, ותוויות משלכם
{ "table": "Sales", "group": { "total": { "sum": "Total" } },
"groupby": { "month": { "mm": "ClosingDate" },
"status": "SaleStatusId.SaleStatuses.Name" } }
// ⇒ {"results":[{"_id":{"month":1,"status":"חדש"},"total":300}, …]}

מסלול Pointer נכתב FieldName.TargetClassName.TargetFieldName, שם המחלקה באמצע. אגרגציית REST הגולמית לא יודעת זאת: כשצריך שמות ולא מזהים, השתמשו בכלי הזה.

חלקי תאריך: hour, dow (1 = ראשון), q, q/yy (⇒ {"yy":2026,"q":1}), mm, mm/yy (⇒ {"yy":2026,"mm":3}), yy. תמיד בצורת האובייקט: { "label": { "mm": "ClosingDate" } }.

JSON
{ "table": "Sales",
"where": { "SaleStatusId": { "__type": "Pointer", "className": "SaleStatuses", "objectId": "zrP1MSVBoq" },
"ClosingDate": { "$gte": { "__type": "Date", "iso": "2026-01-01T00:00:00.000Z" } } },
"group": { "total": { "sum": "Total" } },
"groupby": "OwnerId._User.name",
"order": "-total",
"limit": 10 }

יוצר רשומה אחת.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה
data Object ✔ מפת שדה → ערך
JSON
{ "table": "Tasks",
"data": {
"Name": "לחזור ללקוח",
"DueDate": { "__type": "Date", "iso": "2026-09-01T09:00:00.000Z" },
"AccountId": { "__type": "Pointer", "className": "Accounts", "objectId": "xK9mP2qRsT" },
"OwnerId": { "__type": "Pointer", "className": "_User", "objectId": "2b0QVKoigE" }
} }

התשובה: { "objectId": "LyRGHAc68z", "createdAt": "2026-08-23T11:16:22.956Z" }.

אין דגלי דילוג: טריגרים ירוצו (טריגר create על הטבלה יוצר את רשומת הבת שלו), וכך גם רישום ציר הזמן אם מוגדר לטבלה. השורה ב‑_Timeline נרשמת עם user.objectId === "Master".

יוצר רשומות בכמות. כלי העבודה של כל טעינת נתונים.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה
data Array<Object> ✔ מערך רשומות, כל אחת כמו ב‑Create-Data
skipTriggers Boolean מדלג על כל טריגרי היצירה של הטבלה (עם הדגל לא נוצרת רשומת הבת של הטריגר; בלעדיו — כן)
skipTimeline Boolean ללא רישום ל‑_Timeline (0 שורות מול 1 בלעדיו)
JSON
{ "table": "Accounts",
"skipTriggers": true,
"data": [
{ "Name": "לקוח א'", "PhoneNumber": "0501234567", "IsAccount": false },
{ "Name": "לקוח ב'", "PhoneNumber": "0507654321", "IsAccount": false }
] }

התשובה: מערך בסדר הקלט, פריט לכל רשומה.

JSON
[ { "success": { "objectId": "ivgBTJUiUZ", "createdAt": "2026-08-23T11:16:14.069Z" } },
{ "success": { "objectId": "TqbPMxcyAG", "createdAt": "2026-08-23T11:16:14.069Z" } } ]

הסדר נשמר בדיוק כסדר השליחה. כך מקשרים שורות מקור לרשומות שנוצרו בטעינת שתי טבלאות ברצף (מתכונים).

skipTimeline מקטין את יכולת המעקב; יומנים וראיות מפרט מה מאבדים.

גודל אצווה: עד ~50 רשומות לקריאה. אין מגבלה בסכימה, ואצוות של 60 ו‑120 עוברות, אבל מאות מזהים בתשובה מכבידים על הקשר המודל. לסטים גדולים: לולאת אצוות. ב‑batch של REST ההמלצה 50 אינה נאכפת (1,000 פעולות עוברות), ודגלי דילוג אין לו כלל.

מעדכן רשומה אחת קיימת.

הפרמטר טיפוס חובה המשמעות
table String ✔ שם הטבלה
objectId String ✔ מזהה הרשומה. בדיוק 10 תווים
data Object ✔ שדות לעדכון בלבד; שדה שלא נשלח לא משתנה
JSON
{ "table": "Sales", "objectId": "V0sVNyS45K",
"data": {
"SaleStatusId": { "__type": "Pointer", "className": "SaleStatuses", "objectId": "zrP1MSVBoq" },
"Total": { "__op": "Increment", "amount": 500 },
"ClosingDate": { "__type": "Date", "iso": "2026-09-30T00:00:00.000Z" }
} }

התשובה: objectId, updatedAt, והשדות שחושבו בשרת (למשל "Total": 510 אחרי Increment). מזהה שאינו קיים ⇒ Error: Object not found.

{"__op": "Increment", "amount": n} מגדיל שדה מספרי בצד השרת, בלי מרוץ בין קריאה לכתיבה. ערך שלילי מקטין.

אין עדכון בכמות. עדכון גורף: לולאה של Update-Data, או batch ב‑REST.