如何使用猫鼬防止重复文件mongodb

Posted

技术标签:

【中文标题】如何使用猫鼬防止重复文件mongodb【英文标题】:How to prevent duplicate documents mongodb with mongoose 【发布时间】:2019-03-29 11:36:34 【问题描述】:

我在 mongodb 上有一个用户集合和一个投资组合集合。投资组合模型引用用户集合的 objectid。我正在尝试这样做,因此当用户登录并尝试添加他们已有的文档时,路由器会阻止它。现在所有这一切都是查看投资组合集合中的所有文档,但我试图先按用户过滤它,然后搜索名称以查看它是否存在。

  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' );
     );
    
  )

这是模型

const listSchema = mongoose.Schema(
  user:  type: mongoose.Schema.Types.ObjectId, ref: "Users" ,
  name:  type: String, required: true ,
  description: type:String, required: true,
  image: type:String,
  symbol: type: String, required: true
);

【问题讨论】:

从您的问题中不清楚您想问什么 - 查看代码或解决您遇到的错误或上述代码不起作用的原因? 【参考方案1】:

使用 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 属性 unique。因此,没有两个列表架构可以具有相同的 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部分。

【讨论】:

这无济于事,因为唯一键是在 mongodb 中创建唯一索引,而不是在保存之前检查数据的重复作为验证部分。

以上是关于如何使用猫鼬防止重复文件mongodb的主要内容,如果未能解决你的问题,请参考以下文章

如何在路由器文件中使用猫鼬集合

javascript 如何使用猫鼬连接mongodb?

如何在猫鼬中找到随机记录[重复]

Nodejs,猫鼬没有从 mongodb 获取数据 [重复]

如何在平均堆栈中使用猫鼬在 Mongodb 中存储值

如何使用猫鼬和异步瀑布模型在 MongoDb 中存储数据