Mongodb不会在if/else语句中创建文档
MongoDB的新成员。只有在现有集合中不存在同名文档时,我才尝试将新文档添加到该集合中。我首先使用if/else语句检查是否有与新条目同名的文档,如果没有,则使用else语句创建新条目。无论我尝试什么,新文档都不会被添加,而是返回一个空数组。如果有任何帮助,我将不胜感激 我尝试过切换if/else语句;在返回if语句时检查空值和未定义值Mongodb不会在if/else语句中创建文档,mongodb,Mongodb,MongoDB的新成员。只有在现有集合中不存在同名文档时,我才尝试将新文档添加到该集合中。我首先使用if/else语句检查是否有与新条目同名的文档,如果没有,则使用else语句创建新条目。无论我尝试什么,新文档都不会被添加,而是返回一个空数组。如果有任何帮助,我将不胜感激 我尝试过切换if/else语句;在返回if语句时检查空值和未定义值 app.post('/cocktails/new', isLoggedIn, (req, res) => { // add to DB then sho
app.post('/cocktails/new', isLoggedIn, (req, res) => {
// add to DB then show item
let name = req.body.name;
let style = req.body.style;
let spirit = req.body.spirit;
let image = req.body.image;
let description = req.body.description;
let newCocktail = {name: name, style: style, base: spirit, image:
image, description: description}
Cocktail.find({name}, function (err, existCocktail) {
if(existCocktail){
console.log(existCocktail)
}
else {Cocktail.create(newCocktail, (err, cocktail) => {
console.log(cocktail)
if (err) {console.log(err)}
else {
res.redirect('/cocktails/' + cocktail._id)}
})
}
})
})
如果使用if函数找不到文档,则将执行else语句,从而使用newcockbox对象创建新文档。您应该使用findOne而不是find 当找不到文档时,find返回空数组 下面的表达式返回true,因此existcocktack条件变为true,导致未添加新数据
[] ? true : false
此外,我还对代码进行了一些重构,您可以使用destructuring您的req.body
app.post("/cocktails/new", isLoggedIn, (req, res) => {
// add to DB then show item
const { name, style, spirit, image, description } = red.body;
let newCocktail = {
name,
style,
base: spirit,
image,
description
};
Cocktail.findOne({ name }, function(err, existCocktail) {
if (existCocktail) {
console.log(existCocktail);
res.status(400).json({ error: "Name already exists" });
} else {
Cocktail.create(newCocktail, (err, cocktail) => {
console.log(cocktail);
if (err) {
console.log(err);
res.status(500).json({ error: "Something went bad" });
} else {
res.redirect("/cocktails/" + cocktail._id);
}
});
}
});
});
这就成功了。非常感谢。知道为什么FindOne有效但没有找到吗?@monkeytrick很高兴听到这个消息,你能接受这个答案吗?@monkeytrick Find总是返回smth。如果没有找到任何内容,则返回一个空列表。因此,检查“existCocktail”总是正确的。@S.Kuiter谢谢,我会将此添加到答案中。@monkeytrick我通过编辑答案解释了find的问题。