Javascript 如何使wix数据库项唯一

Javascript 如何使wix数据库项唯一,javascript,database,velo,Javascript,Database,Velo,在我的Wix网站中,我创建了一个数据库,名为“giaCode”的字段应该是唯一的 问题在于Wix数据库没有任何功能来保存唯一的项,比如外键 所以我决定创建一个函数来搜索和删除数据库中的任何重复项。但它不起作用 流程应为: 将CSV文件导入数据库 检查所有行并将其“\u id”记录到数组中 调用数组以删除行 Wix代码(data.js)如下所示: import wixData from 'wix-data'; let n,i,j,duplicateData,items; let k = 0;

在我的Wix网站中,我创建了一个数据库,名为“
giaCode
”的字段应该是唯一的

问题在于Wix数据库没有任何功能来保存唯一的项,比如外键

所以我决定创建一个函数来搜索和删除数据库中的任何重复项。但它不起作用

流程应为:

  • 将CSV文件导入数据库
  • 检查所有行并将其“\u id”记录到数组中
  • 调用数组以删除行

  • Wix代码(
    data.js
    )如下所示:

    import wixData from 'wix-data';
    
    let n,i,j,duplicateData,items;
    let k = 0;
    
    wixData.query("Diamond")
      .count()
      .then( (num) => {
        n = num;
    });
    
    wixData.query("Customer")
      .find()
      .then( (data) => {
        items = data.items;
     });
    
    export function checkDuplicates(value, info) {
        for (i = 0; i < n; i++) { 
            for (j = 0; i < n; j++) { 
                wixData.query("myCollection")
                .eq("giaCode", items[i].giaCode)
                .find()
                .then ((DupResults) => {
                    duplicateData[k][j] = DupResults.items;
                    k++;
                });
            }
        }
    
        for (i = 0; i < k; i++) { 
            for (j = 1; j < duplicateData[k][j].giaCode.length; j++) {
                wixData.remove("Diamond", duplicateData[i][j].giaCode)
            }
        }
    }
    
    
    export function Diamond_afterInsert(item, context) {
        checkDuplicates()
    }
    
    从“wix数据”导入wixData;
    设n,i,j,重复数据,项;
    设k=0;
    wixData.query(“菱形”)
    .count()
    。然后((num)=>{
    n=num;
    });
    wixData.query(“客户”)
    .find()
    。然后((数据)=>{
    项目=数据。项目;
    });
    导出函数检查重复项(值、信息){
    对于(i=0;i{
    duplicateData[k][j]=DuplicateResults.items;
    k++;
    });
    }
    }
    对于(i=0;i
    它应该可以工作,但我收到错误消息:
    如果我理解正确,你有几件事做错了。也就是说,如果您试图阻止将重复项添加到集合中

  • 在插入前使用
    钩子,这样项目就永远不会进入集合,而不是在已经进入集合后将其删除
  • 在您的删除中,您将删除带有
    giaCode
    的现有项目以及副本。我不认为那是你想要的
  • 您没有正确调用
    .eq()
    。你没有说它应该等于什么值
  • 请尝试以下方法:

    import wixData from 'wix-data';
    
    export function searchForDuplicates(value) {
      return wixData.query("Diamond")
        .eq("giaCode", value)
        .find()
        .then((results) => {
          return results.items.length;
        })
        .catch((err) => {
          let errorMsg = err;
        });
    }
    
    export function Diamond_beforeInsert(item) {
      return searchForDuplicates(item.giaCode).then((res) => {
        if(res > 0) {   
          return Promise.reject("Duplicate");
        }
        return item;
      });
    }
    

    在插入之前,我将其切换为
    ,修复了
    .eq()
    ,并删除了所有不必要的代码。

    Hello@TerryLau!有一条规则可以遵循>寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。一旦你这样做,请相应。谢谢!:)更具体地说,最大的抱怨是“可验证”部分。我尝试了代码,但它会收到一些错误消息。和照片一样。