【问题标题】:Trying to get around performing Aggregation on a text field试图绕过在文本字段上执行聚合
【发布时间】:2026-02-09 12:25:01
【问题描述】:

我正在使用 Wix 代码/Javascript 尝试对数据库集合中的项目求和 - 唯一的问题是最初设置它的人将 nos 字段创建为文本而不是整数。

出于某种原因,我可以在返回 1 的数据库上执行 max 聚合,但是我无法对其求和。 (返回 0)

在我看来,我有两个选择:

  1. 煞费苦心地为nos 创建一个具有正确数据类型的新字段,并将数据复制过来并更改该字段的所有输入(由于它是一个实时数据库,因此不太热衷于这个想法)

  2. 使用函数可能$convert: 将文本值更改为 int 以允许求和

我的代码如下:

import wixData from 'wix-data';
import wixUsers from 'wix-users';

$w.onReady( function() {
   const filter = wixData.filter().eq("_owner", "SomeHashedValue");
   wixData.aggregate("CollectionName")
   .filter(filter)
   .group("_owner")
   .sum("nos", "sumnos")
   .run()
   .then( (results) => {
      console.log(results.items)
   } )
} )

有人知道选项 2 是否可行,或者是否有更好的方法? 注意:我知道我没有在代码中使用wix-users,但我会这样做,只是为了测试更容易!

【问题讨论】:

    标签: javascript velo


    【解决方案1】:

    不确定 Wix,但在 JavaScript 中,您可以使用全局方法轻松地将字符串转换为数字(int 或 float):

    var myString = "2";
    
    var myNumber = Number(myString); // 2
    var myInt = parseInt(myString); // 2
    var myFloat = parseFloat(myString); // 2
    

    将字符串转换为数字的简写是在字符串前添加'+':

    var anothernumber = +myString; // 2
    

    MDN link for Number

    【讨论】:

    • 我最终做了一个数据库查询,然后是一个 for 循环,使用你的 'parseInt' 将每个结果中的每个 nos 转换为一个 int,然后总计。所以我要把你的答案标记为一个决议。谢谢老哥!