#javascript #mongodb #loops
Вопрос:
Я просто пытаюсь вставить пару значений ключа, т. Е. {отметка : готово}, в свою базу данных Mongo, используя идентификатор, который я сохранил в массиве.
Но ни за что на свете я не могу понять, почему, если я использую цикл for, он работает нормально. Но если я использую цикл forEach, он выдает ошибку «Невозможно использовать завершенный сеанс».
Я надеюсь, что кто-нибудь ТАК поможет объяснить, почему это происходит
Код Котельной Плиты
import { MongoClient } from "mongodb"; const uri = "mongodb://localhost:27018/"; const client = new MongoClient(uri);
Функция с реализацией «для цикла»
async function updateMongo1() { const db = client.db("testDB"); const coll = db.collection("testCollection"); await client.connect(); try { let array = [ "2021-10-18", "2021-10-17", "2021-10-16", "2021-10-15", "2021-10-14", ]; for (let i = 0; i lt; array.length; i ) { await coll.updateOne( { _id: array[i] }, { $set: { mark: "done" } }, { upsert: true } ); } } catch (e) { console.error(e.message); } finally { await client.close(); } }
Функция с реализацией «forEach»
async function updateMongo2() { const db = client.db("testDB"); const coll = db.collection("testCollection"); await client.connect(); try { let array = [ "2021-10-18", "2021-10-17", "2021-10-16", "2021-10-15", "2021-10-14", ]; array.forEach(async (element) =gt; { await coll.updateOne( { _id: element }, { $set: { mark: "done" } }, { upsert: true } ); }); } catch (e) { console.error(e.message); } finally { await client.close(); } }
выполнение разных реализаций дает разные результаты.
(async () =gt; { //await updateMongo1(); //-gt; this works await updateMongo2(); //-gt; this gives "MongoExpiredSessionError: Cannot use a session that has ended" what gives?? })();
Пожалуйста, дайте мне знать, почему это происходит?
Ответ №1:
Переменная элемента представляет собой массив, например ["2021-10-18"]
. Во второй реализации вы должны были получить доступ element[0]
, но забыли это сделать, поэтому вы поместили массив в поле _id.
Я не знаю, является ли это причиной вашей ошибки, но это ошибка в реализации.
Комментарии:
1. Твое право!! Я обновил код, чтобы значения больше не были вложенными.
2. Можете ли вы отметить мой ответ как правильный, пожалуйста 🙂
3. Я думаю, что вы обнаружили ошибку реализации в моем коде, но я не искал ответа на этот вопрос. В любом случае, я не думаю, что получу ответ на этот вопрос.