我在mongodb上有一个用户集合和一个投资组合集合。投资组合模型引用用户集合的对象ID。我正在尝试这样做,以便当用户登录时,他们尝试添加已经拥有的文档时,路由器会阻止它。现在,所有这些操作都是查看投资组合集合中的所有文档,但是我想先按用户过滤它,然后搜索名称以查看它是否在那里。
.catch(error => res.status(error.response.status).send(error.response.statusText);
这是模型
portfolio.find({name: req.body.name})
.count()
.then(count => {
if (count > 0) {
// There is an existing user with the same username
res.status(400).json({message: 'Stock already saved!'});
}else{
portfolio
.create({
user: req.body.user,
name: req.body.name,
description: req.body.description,
symbol: req.body.symbol,
image: req.body.image,
})
.then(portfolioPost => res.status(201).json(portfolioPost.serialize()))
.catch(err => {
// console.error(err);
res.status(500).json({ error: 'Something went wrong' });
});
}
})
答案 0 :(得分:0)
使用 {unique:true} 因此,每当有人尝试对多个项目组合使用相同的用户ID时,猫鼬都会抛出错误。
您的模型将会是
const listSchema = mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, ref: "Users", unique: true },
name: { type: String, required: true },
description: {type:String, required: true},
image: {type:String},
symbol: {type: String, required: true}
});
我使用了 user 属性唯一。因此,两个列表架构都不能具有相同的userId。
最后,您可以跳过查找以前的用户组合的过程。您的代码可以是
portfolio
.create({
user: req.body.user,
name: req.body.name,
description: req.body.description,
symbol: req.body.symbol,
image: req.body.image,
})
.then(portfolioPost => res.status(201).json(portfolioPost.serialize()))
.catch(err => {
// console.error(err);
res.status(500).json({ error: 'Something went wrong' });
});
在这种情况下,如果已经有使用当前userId的投资组合,则MongoDB将收到错误消息。
有关更多详细信息,请检查Additional Options部分。