【问题标题】:Create new document if there is not document with same name mongoose如果没有同名 mongoose 的文档,则创建新文档
【发布时间】:2021-03-21 18:46:16
【问题描述】:
var userSchema = mongoose.Schema({
    username: { type: String},
    email: String,
    password: String,
    tasks: [String]
});

我只想在没有其他同名用户的情况下创建一个新的用户文档。 最好的方法是什么? 这是我目前的实现:

router.post('/', async function(req, res, next) {
use  let user= await User.findOne({ name: req.body.name})
        if (user) {
            if (req.body.name == user.name) {
                // return new Error("User exists!"));
        } 
    User.create(req.body, function (err, newuser) {
        if (err) {
            console.log(err);
            return next(err);
        }
        res.json(newuser);
    });

    }

另一个问题关于 mongoDB 集合: 我应该为“任务”属性打开新集合(和模式)吗? 它只有 1 个字段 - 字符串类型的任务本身。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    你当前的实现是要走的路,你找到用户,如果没有找到,你创建一个新的。

    我对您的代码进行了一些重构,如下所示:

    router.post('/', async function (req, res, next) {
      try {
        const user = await User.findOne({ name: req.body.name });
        if (user) {
          return res.json(user);
        }
    
        const newUser = await User.create(req.body);
    
        return res.json(newUser);
      } catch (err) {
        console.log(err);
        return next(err);
      }
    });
    

    关于第二个问题,如果您确定任务将始终是一个简单的字符串并且您不需要更多数据,最好将其嵌入文档中。

    您可能需要扩展任务的功能,并添加更多数据,例如状态、截止日期,可能还有子任务,在这种情况下,最好将其分离到不同的集合中。

    This series of articles 可能是快速学习如何设计架构的经验法则的好地方。

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2019-08-04
      • 2021-09-12
      • 2021-04-11
      • 1970-01-01
      • 2015-10-13
      • 2017-03-13
      • 2010-11-20
      • 2016-01-13
      相关资源
      最近更新 更多