如何使wix数据库项目唯一

时间:2018-08-20 16:13:41

标签: javascript database wixcode

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

问题是 Wix 数据库没有任何功能来保留唯一的项-例如外键。

因此,我决定创建一个函数来搜索和删除数据库中的所有重复项。但这是行不通的。

该过程应为:

  1. 将CSV文件导入数据库
  2. 检查所有行并将其“ _id ”记录到数组中
  3. 调用数组以删除行

下面的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()
}

应该可以,但是我收到错误消息: enter image description here

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您在做错几件事。也就是说,如果您试图阻止将重复项添加到集合中。

  1. 使用beforeInsert钩子,使该项目永远不会进入集合,而要在它已经存在之后将其删除。
  2. 在删除操作中,您将删除带有giaCode的现有项以及重复项。我认为那不是您想要的。
  3. 您未正确致电.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;
  });
}

我将其切换到beforeInsert挂钩,修复了.eq(),并删除了所有不必要的代码。