如何在mongodb中找到一个对象

时间:2019-03-05 18:29:01

标签: node.js mongodb collections

我是mongodb的新手,正在尝试将输入中键入的名称与保存在我的集合中的名称进行比较,如果存在相同的名称,我想在此对象名称的数据库中增加“ numberOfSearches”,如果没有让它在集合中创建那个。毕竟我不知道如何在“ if”中比较这些名称,否则应该使用Find方法还是该方法?

    app.post('/stronka', function(req,res){
    var obj = {name: req.body.chosenCity, numberOfSearches: 1};

    if(db.collection('miasta').find({name: obj.name})){
        db.collection('miasta').updateOne(
            {"name": obj.name},
            {$inc: {"numberOfSearches": 1}}
            )
        res.redirect('/stronka');
        console.log("first option");
    }
    else{
        db.collection('miasta').insertOne(obj, function(err, result){
            if(err) return console.log(err);

            console.log('saved to database')
            res.redirect('/stronka');
        })
        console.log("sec option");
    }


})

1 个答案:

答案 0 :(得分:0)

您可能会遇到的一个问题是db.collection('...').find()将返回异步Promise而不是同步值。为了使用find()的结果,您需要像这样await

    app.post('/stronka', async function(req,res){ <-- note the addition of the async keyword
    var obj = {name: req.body.chosenCity, numberOfSearches: 1};
    const result = await db.collection('miasta').find({ name: obj.name });
    if (result) {
       ....
    } else {
       ...
    }
});

您将需要对updateOne和对MongoDb的其他调用应用类似的原则,但我将其留给您练习(: