如何使用 attrib repeat rethinkdb 删除项目

how remove item with attrib repeat rethinkdb

我有问题。我在 rethinkdb 中有一个查询,但是当我尝试删除具有一个属性重复的项目时显示了一个问题。

数据table

[
    {
        codeQR: '100001597182620700',
        numid: '1000081',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597182749578',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597185279006',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183951080',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183951216',
        numid: '1000083',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597185279182',
        numid: '1000083',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597182864764',
        numid: '1000083',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597185307862',
        numid: '1000084',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183974288',
        numid: '1000084',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183002590',
        numid: '1000084',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    }
]

用rethinkdb查询

r.db('myDb').table('userSearchData')
.filter(querys=>
    querys('numid').gt('1000080')
    .and(
        querys('numid').lt(String('1000085'))
    )
)
.limit(5)

这个查询显示了它:

[
    {
        codeQR: '100001597182620700',
        numid: '1000081',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597182749578',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597185279006',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183951080',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183951216',
        numid: '1000083',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    }
]

所以,问题是因为如果你看到,数组有一个属性为 numid 的项目,我希望它只显示一个相同的项目 numid 。我用 reduce() javascript 函数解决了它

let datas=resultQuery.reduce((arry, val)=>{
    if(arry.length){
        if(!arry.some(val2=>val2.numid===val.numid)){
            arry.push(val)
        }
    }else
        arry.push(val)
    return arry
}, [])
console.log(datas, 'FT array filter', __filename)

最终结果为:

[
    {
        codeQR: '100001597182620700',
        numid: '1000081',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597182749578',
        numid: '1000082',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    },
    {
        codeQR: '100001597183951216',
        numid: '1000083',
        user: 'a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5'
    }
]

但我只订购了 5 件中的 3 件

Img 显示了比我想要的 rethinkdb

您得到的结果是正确的。我不知道你的期望是什么:

let datas=resultQuery.reduce((arry, val)=>{
    if(arry.length){
        if(!arry.some(val2=>val2.numid===val.numid)){
            arry.push(val)
        }
    }else
        arry.push(val)
    return arry
}, [])
console.log(datas, 'FT array filter', __filename)
  1. 第一个项目 arry.length 是错误的,因此您只需添加项目
  2. 检查 numid 是否尚不存在的第二个项目 -> 添加项目
  3. numid 已经存在 -> 跳过
  4. numid 已经存在 -> 跳过
  5. numid new -> 添加项目

您可以使用 group 通过匹配 numid 对您的数据进行分组。然后 select 这些组中的第一个条目。我不确定所需的 selection 应该是什么,但您可以在 map 函数中实现任何条件。

r.db('myDb').table('userSearchData')
.filter(querys=>
    querys('numid').gt('1000080')
    .and(
        querys('numid').lt(String('1000085'))
    )
)
.group("numid")
.ungroup()
.map(r.row("reduction")(0))
.limit(5) 

对数据进行分组将产生如下桶:

[
    {
        "group": "1000081",
        "reduction": [
            {
                "codeQR": "100001597182620700",
                "numid": "1000081",
                "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
            }
        ]
    },
    {
        "group": "1000082",
        "reduction": [
            {
                "codeQR": "100001597183951080",
                "numid": "1000082",
                "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
            },
            {
                "codeQR": "100001597182749578",
                "numid": "1000082",
                "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
            },
            {
                "codeQR": "100001597185279006",
                "numid": "1000082",
                "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
            }
        ]
    } 
//....
]

然后您将不得不使用 ungroup 函数继续向查询添加方法。使用 map() 你 select 每次减少的第一个元素。

那么你的结果是:

[
    {
        "codeQR": "100001597182620700",
        "numid": "1000081",
        "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
    },
    {
        "codeQR": "100001597183951080",
        "numid": "1000082",
        "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
    },
    {
        "codeQR": "100001597185279182",
        "numid": "1000083",
        "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
    },
    {
        "codeQR": "100001597183974288",
        "numid": "1000084",
        "user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
    }
]