اذهب إلى المحتوى

السؤال

نشر (معدل)

االسلام عليكم..

لدي قاعدة بيانات MongoDb وقمت بجلب بيانات ملف google sheet لكن المشكلة هي عند تحديث البيانات في google sheet، اريد ان اقوم بتحديث البيانات المحدثة في الشيت او التي تم اضافاتها ووضعها في قاعدة البيانات..

يعني بمجرد ما يقوم المستخدم بتحديث البيانات في ملف الشيت، اريد تلقائيا وضعها في قاعدة البيانات.

ملف المشروع:
user.jsindex.jspackage.jsonpackage-lock.json

 

تم التعديل في بواسطة Samer Alashqar

Recommended Posts

  • 0
نشر

حاول القيام بالتعديلات التالية

عليك بتعديل الدالة app.get() للحصول على البيانات المحدثة من Google Sheet، باستخدم googleSheets.spreadsheets.values.get للحصول على الصفوف المحدثة بدلاً من الصفوف الكاملة، وتستطيع استخدام علامة الوقت (timestamp) لتتبع آخر تحديث للبيانات.

app.get('/', async (req, res) => {
  try {
    // كود الاستدعاء والتحقق من المصادقة والترخيص لخدمة Google Sheets API هنا

    const spreadsheetsId = "19Z6XyZSTDvGt1VwL17znI8GoRUvTP0OMwckHujP312E";
    const range = "Sheet1!A:E"; // تعديل نطاق البيانات حسب الاحتياج

    const getRows = await googleSheets.spreadsheets.values.get({
      auth: auth,
      spreadsheetId: spreadsheetsId,
      range: range,
    });

    const updatedData = getRows.data.values;
    
    // قم بتحديث البيانات في قاعدة بيانات MongoDB هنا
    // يمكنك استخدام مكتبة Mongoose لتحديث البيانات في موديل User

    for (const data of updatedData) {
      const user = {
        userName: data[0], // تأكد من تعديل الفهرس بناءً على هيكلة البيانات في جوجل شيت
        // قم بتحديث المزيد من الحقول إذا لزم الأمر وفقًا لهيكل البيانات في جوجل شيت
      };

      await User.findOneAndUpdate({ userName: user.userName }, user, {
        upsert: true, // إضافة السجل إذا لم يكن موجودًا
      });
    }

    res.send();
  } catch (error) {
    console.log(error);
    res.status(500).send();
  }
});

وتأكد من تعديل المدى (range) لتناسب هيكلة البيانات في Google Sheet، وفي الكود السابق، استخدمت "Sheet1!A:E" كمثال، حيث يتم افتراض وجود 5 حقول (من A إلى E) في كل صف.

وفي حلقة for، قم بتحويل البيانات المستلمة من Google Sheet إلى كائنات user واستخدم findOneAndUpdate لتحديث السجلات الموجودة في قاعدة البيانات أو إضافة سجل جديد إذا كان غير موجود (upsert: true).

  • 0
نشر
بتاريخ 4 ساعة قال Mustafa Suleiman:

حاول القيام بالتعديلات التالية

عليك بتعديل الدالة app.get() للحصول على البيانات المحدثة من Google Sheet، باستخدم googleSheets.spreadsheets.values.get للحصول على الصفوف المحدثة بدلاً من الصفوف الكاملة، وتستطيع استخدام علامة الوقت (timestamp) لتتبع آخر تحديث للبيانات.

app.get('/', async (req, res) => {
  try {
    // كود الاستدعاء والتحقق من المصادقة والترخيص لخدمة Google Sheets API هنا

    const spreadsheetsId = "19Z6XyZSTDvGt1VwL17znI8GoRUvTP0OMwckHujP312E";
    const range = "Sheet1!A:E"; // تعديل نطاق البيانات حسب الاحتياج

    const getRows = await googleSheets.spreadsheets.values.get({
      auth: auth,
      spreadsheetId: spreadsheetsId,
      range: range,
    });

    const updatedData = getRows.data.values;
    
    // قم بتحديث البيانات في قاعدة بيانات MongoDB هنا
    // يمكنك استخدام مكتبة Mongoose لتحديث البيانات في موديل User

    for (const data of updatedData) {
      const user = {
        userName: data[0], // تأكد من تعديل الفهرس بناءً على هيكلة البيانات في جوجل شيت
        // قم بتحديث المزيد من الحقول إذا لزم الأمر وفقًا لهيكل البيانات في جوجل شيت
      };

      await User.findOneAndUpdate({ userName: user.userName }, user, {
        upsert: true, // إضافة السجل إذا لم يكن موجودًا
      });
    }

    res.send();
  } catch (error) {
    console.log(error);
    res.status(500).send();
  }
});

وتأكد من تعديل المدى (range) لتناسب هيكلة البيانات في Google Sheet، وفي الكود السابق، استخدمت "Sheet1!A:E" كمثال، حيث يتم افتراض وجود 5 حقول (من A إلى E) في كل صف.

وفي حلقة for، قم بتحويل البيانات المستلمة من Google Sheet إلى كائنات user واستخدم findOneAndUpdate لتحديث السجلات الموجودة في قاعدة البيانات أو إضافة سجل جديد إذا كان غير موجود (upsert: true).

يعطيك العافية اخي الكود يعمل جيداً..

لكن مشكلتي هي عند اضافة او تعديل اي بيانات في قوقل شيت، لايتم وضع البيانات في قاعدة البيانات الا عند الذهاب لصفحة الموقع وعمل Refresh للصفحة، اعلم ان السبب هو المسار / في ()app.get لان الاكواد لا يتم تنفيذها الا عند الذهاب لهذا المسار  ==>  '/'..

هل هناك حل ؟ ارجو المساعدة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...