如何使用 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)
- 第一个项目 arry.length 是错误的,因此您只需添加项目
- 检查 numid 是否尚不存在的第二个项目 -> 添加项目
- numid 已经存在 -> 跳过
- numid 已经存在 -> 跳过
- 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"
}
]
我有问题。我在 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)
- 第一个项目 arry.length 是错误的,因此您只需添加项目
- 检查 numid 是否尚不存在的第二个项目 -> 添加项目
- numid 已经存在 -> 跳过
- numid 已经存在 -> 跳过
- 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"
}
]