我是 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/