【问题标题】:MongoDB if field does not exist insertMongoDB如果字段不存在插入
【发布时间】:2020-05-14 17:41:45
【问题描述】:

我有类别架构,如果类别名称不存在,我想插入新类别。我尝试了一些东西,但我没有任何反应。

category.model

var mongoose = require("mongoose");
var categorySchema = mongoose.Schema({
  name: {
    type: String,
    require: true
  },
  createdAt: {
    type: Date,
    default: () => {
      return new Date();
    }
  }
});

module.exports = mongoose.model("category", categorySchema);

分类插入功能

var Category = require("../models/category.model");
exports.create = (req, res) => {
  Category.find({ name: req.body.name }, (err, cat) => {
    if (cat.length > 0) {
     // i want to return exists message here
    } else {
      // i want to insert here if not exists
      var category = new Category();
      category.name = req.body.name;
      category.save(err => {
        if (err) {
          return new response(null, err).error500(res);
        }
        return new response(category, null).created(res);
      });
    }
  });
};

【问题讨论】:

  • 应该是required: true,而不是require
  • 您还有其他错误信息吗?代码看起来几乎正确(见上面的评论)。还要在名称上添加一个唯一索引(如果您想确保每个名称只有一个类别)。
  • 听起来upsert 也可以满足您的创建需求(如果不存在):stackoverflow.com/questions/7267102/…
  • 这能回答你的问题吗? How do I update/upsert a document in Mongoose?
  • @AntoineBolvy Thx,我已经在名称上添加了唯一索引并且我已经采取了回应。

标签: javascript mongodb


【解决方案1】:

你可以像下面的代码那样做:

exports.create = async (req, res) => {
  try {
    let category = await Category.find({ name: req.body.name });

    if(category) {
      // return or do some stuff here
    }

    category = new Category(req.body);

    category = await category.save();

    return new response(category, null).created(res);

  } catch(ex) {
    console.log(ex.message);
    return new response(null, ex).error500(res);
  }
};

希望对你有帮助。

【讨论】:

  • 在初始代码没有的地方引入promise时要小心,你不知道它们将如何处理,你也不知道OP是否知道它们:)
猜你喜欢
  • 2011-02-17
  • 2015-12-21
  • 1970-01-01
  • 2012-03-28
  • 2015-12-02
  • 2016-08-04
  • 1970-01-01
  • 2021-04-24
  • 2018-02-05
相关资源
最近更新 更多