קורס Node.JS שיעור שמירת מידע בבסיס נתונים MongoDB


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/nodejs/lessons/35-mongodb

היי ינון, נראה שבגרסאות עדכניות, יש שגיאות deprecated בניסיון הרצה.

הי,

כן אני רואה - הם קצת נודניקים שם. הם יודעים שהם הולכים להכניס Breaking Change בגירסא עתידית אז בינתיים מוסיפים פרמטר כדי שתוכל לבחור אם להשתמש בהתנהגות החדשה (כאשר בגירסא העתידית ההתנהגות החדשה הזו תהפוך ל Default). במסגרת הקורס שלנו אין הבדל בין ההתנהגות הישנה לחדשה של הדרייבר, אז אין בעיה להוסיף את הפרמטר של ההתנהגות החדשה שנקרא useUnifiedTopology.

עדכנתי את הדוגמאות בתיקית הדוגמאות בשיעור לכלול את הפרמטר החדש, אפשר למצוא את הגירסא העדכנית בגיטהאב:

הקוד החדש הוא רק שורת החיבור - זה הקוד העדכני:

const connectOptions = {
  useUnifiedTopology: true,
  useNewUrlParser: true,
};

// Database Name
const dbName = 'myproject';
const client = new MongoClient(url, connectOptions);

מקווה שזה עוזר, אבל אם היתה לך שגיאה אחרת אשמח שתדביק אותה כאן ואנסה לעזור.

ועוד אגב - אני במצבים כאלה רץ להסתכל ב Release Log וב Issues של הספריה כדי להבין מאיפה ההודעה באה, ואני חושב שזה הרגל טוב לאמץ. במקרה של ההודעה כאן היא נכנסה בגירסא 3.2.1 ואפשר למצוא את כל הפרטים על הגירסא בעמוד הזה:

אני הגעתי אליו דרך חיפוש בעמוד פרטי כל הגירסאות כאן:

@ynonp
סליחה שאני משגע אותך שוב,
אשמח לדעת אם יש דרך קלה להכניס ולשמור קובץ ג’יסון גדול של 2 מליון שורות שמכיל מידע על ערים בעולם לתוך מונגו בדרך קלה ובפשוטה.
הקובץ מסודר במבנה של גיסון עם אי די מיוחד לכל אחד. אני רוצה לשמור אותו במונגו כדי שלא יכביד על הוי אס קוד שלי וגם כדי לשלוף ממנו מידע בקלות יחסית על פי הצורך.
אשמח לדעת האם שימוש ב- insertMany מומלץ?
תודה רבה

הי

אם הקובץ לא עובר את מגבלת המקום של מונגו (16 מגה) אז אתה יכול לשמור את כולו בתור Document אחד וזה הכי קל.

אם הוא יותר גדול אז צריך להבין מה ההגיון ולחלק אותו בצורה הגיונית למסמכים. זה לא משנה אם תכניס את המסמכים לשם אחד אחד או עם insertMany כי זה משהו שקורה רק פעם אחת.

למי שנתקל בבעיית חיבור לlocalhost (כמוני) , [אני משתמש בהרצה של mongod כmacOs backgound service] ובאופן הזה אי אפשר להתחבר דרך localhost באמצעות דרך הuri הזה:
mongodb://localhost:27017

אז זה הפתרון שעבד לי:
mongodb://127.0.0.1:27017
אז הכל עובד…

לייק 1

@ynonp למה לא לעבוד עם compass ?
אני חושב שהוא הרבה יותר מודרני ומלא פיצ׳רים מrobo מה גם שהוא מזוהה יותר עם הcomunity של mongoDB…

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

ינון שלום
הפנק להזנת הנתונים

await collection.insertOne

לפחות אצלי מחייבת שימוש ב await. אם אני לא מוסיף את ה await הפנקציה:

client.close()

נקראת לפני

insertOne

ומתקבלת השגיאה הבאה

MongoRuntimeError: Connection pool closed
    at ConnectionPool.close (F:\ToCode\nodejs\33\node_modules\mongodb\lib\cmap\connection_pool.js:212:46)
    at Server.destroy (F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\server.js:129:21)
    at destroyServer (F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\topology.js:497:12)
    at F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\topology.js:259:93
    at eachAsync (F:\ToCode\nodejs\33\node_modules\mongodb\lib\utils.js:500:9)
    at F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\topology.js:259:39
    at ServerSessionPool.endAllPooledSessions (F:\ToCode\nodejs\33\node_modules\mongodb\lib\sessions.js:590:13)
    at F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\topology.js:258:32
    at eachAsync (F:\ToCode\nodejs\33\node_modules\mongodb\lib\utils.js:503:9)
    at Topology.close (F:\ToCode\nodejs\33\node_modules\mongodb\lib\sdam\topology.js:257:31) {
  [Symbol(errorLabels)]: Set(0) {}
}

היי, אני מריצה מקבלת שגיאה כזו:

לא הצלחתי למצוא פתרון מועיל.
אשמח לתגובה.

היי,
אשמח בבקשה לתשובה.
אני לחוצה מעט להתקדם.
תודה

הי השגיאה אומרת ש MongoDB לא רץ או לא מוכן לקבל חיבורים. איך הפעלת אותו?

זה הקוד שלי:

const MongoClient = require('mongodb').MongoClient;

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'myproject';
const client = new MongoClient(url, { useNewUrlParser: true });

async function main() {
    await client.connect();
    console.log("Connected successfully to server");

    client.close();
}

main();

למה הכוונה לא מוכן לקבל חיבורים? הlocalhost רץ:


מה עוד עלי לבדוק?

הסתדרתי,
היה צריך לשנות ל:

const url = "mongodb://0.0.0.0:27017";

במקום:

const url = 'mongodb://localhost:27017';

את מריצה את מונגו על אותה מכונה או במכונה וירטואלית? כי אם זה על אותה מכונה localhost אמור להספיק

אני מריצה על אותה מכונה