如何使用attrib删除项目重复rethinkdb 使用rethinkdb查询,最终结果是:该rethinkdb显示出比我想要的

问题描述

我有问题。我在rethinkdb中有一个查询,但是当我尝试删除具有一个attrib重复项的项目时出现问题。

数据表

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

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

该rethinkdb显示出比我想要的

enter image description here

解决方法

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

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为false,因此您只需添加该项目
  2. 您检查是否还存在numid的第二个项目->添加项目
  3. 编号已经存在->跳过
  4. 编号已经存在->跳过
  5. 新编号->添加项目
,

您可以使用group通过匹配numid对数据进行分组。然后选择那些组中的第一个条目。我不确定应该选择什么,但是您可以在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",{
                "codeQR": "100001597185279006","user": "a1d0c8d0-7305-43b1-8b4d-d9a6274d76f5"
            }
        ]
    } 
//....
]

然后,您将必须使用ungroup函数来继续向查询添加方法。然后使用map()选择每个缩减的第一个元素。

那么您的结果是:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...