Реализация в NodeJS MongoDB native driver

306
25 июля 2017, 20:23

После перебирания Гоголевских ответов и Ютубовских видео, так и не нашел решения моего вопроса....

Нужно реализовать следующую функцию, используя node.js mongodb native driver:

var users =[{name:"one",warns:1}]; //Можно сказать, что это db.collection("users").find().toArray(callback);
function plus(name){ //Та самая функция
    for(i in users){ //Перебираем йузеров, да бы найти нужного (Вроде, можно использовать db.collection("users").findOne({name:name},callback)")
        if(users[i].name === name) { //Если находим
            users[i].warns++; //Прибавляем 1 к параметру warns
            return; //И сваливаем
        }
    }//Иначе, если таковой не нашелся - создаём его
    users.push({name:name, warns:1});
}
Answer 1

Можно с нативным драйвером использовать промисы, а следовательно и async/await. Если я правильно понял то можно написать так

function add(name){ 
        (async () => { 
            try { 
                let collection = db.collection('users'); 
                let user = await collection.findOne({ name: name }); 
                if (user) { 
                    user.warns++; 
                    await collection.updateOne({ name: name }, user); 
                } else { 
                    await collection.insertOne({name: name, warns:1}); 
                } 
            } catch (error) { 
                console.error(error) 
            } 
        }); 
}

Через колбеки

function add(name){ 
        db.collection('users').findOne({ name: name }, (err, user) => { 
            if (err) throw err; 
            if (user) { 
                user.warns++; 
                db.collection('users').updateOne({ name: name }, user, (err, result) => { 
                    if (err) throw err; 
                    console.log(result); 
                }); 
            } else { 
      
 
       db.collection('users').insertOne({ name: name, warns: 1 }, (err, result) => { 
                if (err) throw err; 
                console.log(result); 
            }); 
        } 
    }); 
}

READ ALSO
Событие при innerText в js

Событие при innerText в js

Есть вот такой кусок кодаХочу отловить событие изменения innerText

281
object Promise вместо значения

object Promise вместо значения

ПриветЕсть две функции, использующие async await:

230
Как имитировать клик с помощью ref?

Как имитировать клик с помощью ref?

Как имитировать клик на span UploadНа самом деле нажимаю на кнопку submit, но словно на span

251
Необязательные параметры RewriteRule ЧПУ в .htaccess

Необязательные параметры RewriteRule ЧПУ в .htaccess

Можно ли указывать необязательные параметры RewriteRule при написании ЧПУДопустим есть скрипт с запросом - cats

244