魑魅魍魉cmwl
魑魅魍魉cmwl
  • 发布:2022-12-04 13:45
  • 更新:2022-12-05 20:58
  • 阅读:184

JQL不能进行数组相等查询么?

分类:uniCloud
{  
    "arr": [  
        1,  
        2,  
        3  
    ]  
}
db.collection('test').where({arr:[1,2]}).get()

报错如下:==右侧值类型不正确

2022-12-04 13:45 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

in操作符啊,如下形式:

db.collection('default').where(`arr in [1,2,3]`).get();
  • 魑魅魍魉cmwl (作者)

    是要相等查询,in不满足需求,arr in [1,2]不应该返回这条数据的


    2022-12-04 16:05

魑魅魍魉cmwl

魑魅魍魉cmwl (作者)

eq不是可以支持array么,为什么也返回这个错误。

呆狗的一生

呆狗的一生 - 呆狗的一生

db.collection('default').where(`arr == 1 && arr== 2 && arr == 3`).get();
  • 魑魅魍魉cmwl (作者)

    是个长度不超过2的数组,改用指定数组下标+限定长度了,搞得过于复杂了。

    云函数是可以直接比较的,就是JQL不支持。


    2022-12-04 21:09

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

完全相等可以用all + size实现,jql也是支持这种写法的。

  • 魑魅魍魉cmwl (作者)

    是的,目前是这样实现的,不过这种会有局限,无法保证顺序相等。目前需求不需要保证顺序相等,就ok。


    2022-12-05 13:40

  • 呆狗的一生

    回复 魑魅魍魉cmwl: 如果你要保证顺序,就用字符串保存


    2022-12-05 20:53

呆狗的一生

呆狗的一生 - 呆狗的一生

all真不错
示例:找出 tags 数组字段同时包含 cloud 和 database 的记录

const dbCmd = db.command  
let res = await db.collection('todos').where({  
  tags: dbCmd.all(['cloud', 'database'])  
})  
.get()

要回复问题请先登录注册