[英]How to check if document with certain fields already exists in the MongoDB database?
[英]How to check for document already in database before POST - MongoDB, NodeJS
我试图在发布之前检查数据库中是否已经有文档。 我通过jQuery.post()方法发布到我的api /歌曲端点。
我要检查的是查看歌曲是否已在数据库中。 我可以通过查询要推送到数据库的songId参数来进行检查。 如果歌曲已经存在于数据库中,我想将数字增加1。
我一直在尝试使用mongo的findOne(),但是我无法在POST中使用它。 我的张贴路线如下:
router.post('/api/songs', function(req, res){
if(Song.findOne({songId: req.body.songId}).length > -1){
console.log('already in there fam')
} else{
var song = new Song();
song.artistName = req.body.artistName;
song.titleName = req.body.titleName;
song.songId = req.body.songId;
song.songImg = req.body.songImg;
song.save(function(err) {
if (err) {
console.log("Error: " + err)
} else {
console.log("created fam")
}
})
};
console.log(song);
return res.json({message: "SongCreated"})
})
我的问题是我无法弄清楚findOne返回什么。 我希望它返回一个布尔值,所以我尝试了count()
和length()
但无法使其返回true。 无论如何, req
发布到数据库。
有任何想法吗?
node.js中的所有I / O操作都是异步的。 您的Song.findOne操作也是异步的。 您应该等待它通过回调功能完成,然后检查其结果。
猫鼬的findOne方法返回一个Promise。 您可以在此处阅读更多信息。
承诺执行示例:
var query = Song.findOne({songId: req.body.songId})
query.exec(function(err, song) {
})
尝试以下代码:
router.post('/api/songs', function(req, res){
Song.findOne({songId: req.body.songId}, function(err, song){
if (err) {
return console.log("Error: " + err)
}
if(song){
return console.log('already in there fam')
}
var song = new Song();
song.artistName = req.body.artistName;
song.titleName = req.body.titleName;
song.songId = req.body.songId;
song.songImg = req.body.songImg;
song.save(function(err) {
if (err) {
console.log("Error: " + err)
} else {
console.log("created fam")
}
})
console.log(song);
return res.json({message: "SongCreated"})
})
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.