node.js - 如何在mongodb中查找一个对象

标签 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");
    }


})

最佳答案

您可能会遇到的一个问题是 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 的调用应用类似的原则,但我将把它作为练习留给您(:

关于node.js - 如何在mongodb中查找一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009329/

相关文章:

javascript - mongoose.Schema() 和 new mongoose.Schema() 有什么区别?

java - 如何使用集合框架在java中实现以下数据结构

java - 从一副 52 副牌中处理 7 个随机非重复 "cards"

node.js - 关闭 SockJS 连接

node.js - 缩进无效,可以使用制表符或空格,但不能同时使用 jade

javascript - 如何使用 Mongoose 模式获取数据并将其发送给客户端?

python - 如何在 mongodb 的嵌入式列表中使用 $gt 和 $lt

java - 对 Map<String, List<String>> 类型的映射中的值进行排序

javascript - 使用Browserify编译NPM包

javascript - 在 Express JS 中上传和调整图像大小时遇到​​问题