问题描述
我有问题。我在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显示出比我想要的
解决方法
您得到的结果是正确的。我不知道您的期望是什么
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为false,因此您只需添加该项目
- 您检查是否还存在numid的第二个项目->添加项目
- 编号已经存在->跳过
- 编号已经存在->跳过
- 新编号->添加项目
您可以使用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"
}
]