【问题标题】:How to make the wix database items unique如何使 wix 数据库项目唯一
【发布时间】:2018-08-20 16:13:40
【问题描述】:

在我的 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

【问题讨论】:

  • 你好@TerryLau!有一个规则可以遵循 > 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example.。一旦你这样做,请相应地edit the question。谢谢! :)
  • 更具体地说,最大的抱怨是“Verifiable”部分。

标签: javascript database velo


【解决方案1】:

如果我理解正确的话,有些事情你做错了。也就是说,如果您试图阻止将重复项添加到集合中。

  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(),并删除了所有不必要的代码。

【讨论】:

  • 我已经尝试了代码,但仍然收到一些错误消息。与照片相同。
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多