【问题标题】:Prevent duplicate field in database防止数据库中的重复字段
【发布时间】:2021-03-08 12:28:56
【问题描述】:

我需要创建一个 api 来创建一个实体,该实体的数据中必须有一个唯一的名称。

exp:

{
 name: "Reza",
 ...
}

问题是如何抛出该名称的错误已被采用。 我可以通过读取整个表并检查是否没有具有该名称的对象然后创建实体来处理它,但是我可以用并发做什么? 如果其他人同时调用 create api 并且同名它不在 db 中,那么我不会注意到它是重复名称,那么我们会遇到重复。 该项目在 baas 上,该服务使用 mongodb,但我不直接访问它,并且由于分片,我不能使用唯一索引。 这种情况有什么解决方法吗?

【问题讨论】:

  • 也许你可以使用unique indices
  • @Julia 该项目在 baas 上,服务使用 mongodb,但我不直接访问它,并且由于分片,我无法使用唯一索引

标签: database mongodb api unique


【解决方案1】:

尝试将数据库中已找到的名称添加到数组中,并比较正在插入的名称。我将发布此代码,以检查是否插入到数据库的应用程序名称(如果可用)并将其呈现在其他地方,您可以从这个概念中受益。

const updateAppNames = async () => {
    let apps = await purchaseFromAppObjectModel.find({}).sort({ name: 1 });
    const availableApps = [];
    for (var i = 0; i <= apps.length; i++) {
      try {
        const obj = apps[i];
        const appName = obj.appName;
        if (availableApps.includes(appName)) {
          console.log("This app exists :", appName);
        } else {
          console.log("This  app does not exist :", appName);
          availableApps.push(appName);
          console.log(availableApps);
        }
      } catch {
        console.error();
      }
    }
    return availableApps;
  };

结果:

This  app does not exist : com.xxx
[ 'com.xxx' ]
This  app does not exist : com.xxy
[ 'com.xxx', 'com.xxy' ]
This app exists : com.xxx
This app exists : com.xxx
This  app does not exist : any game
[ 'com.xxx', 'com.xxy', 'any game' ]
This app exists : any game
This app exists : any game
This app exists : any game
This app exists : any game
This  app does not exist : any.any.any
[
  'com.xxx',
  'com.xxy',
  'any game',
  'any.any.any'
]
This app exists : any.any.any
This app exists : any.any.any
This app exists : any.any.any

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多