RethinkDB过滤对象数组

问题描述 投票:0回答:1

我是rethinkdb的新手,我希望过滤类似于......以猕猴桃或草莓作为首选水果

{
    "id":  "65dbaa34-f7d5-4a25-b01f-682032fc6e05" ,
    "fruits": {
        "favorite":  "Mango" ,
        "preferred": [
                        "Kiwi" ,
                        "Watermelon"
                    ]
    }
}

我在阅读contains doc后尝试了类似的东西:

r.db('appname').table('food')
 .filter(r.row('fruits').contains(function(doc) {
   return doc('preferred').contains('Kiwi');
 }))

而且我得到了e: Cannot convert OBJECT to SEQUENCE in:错误。

r rethinkdb reql
1个回答
3
投票

这就是你要找的东西:

r.db('appname').table('food')
  .filter((row) => { 
    r.or( // Returns true if any of the following are true
      row('fruits')('preferred').contains('Kiwi'),
      row('fruits')('preferred').contains('Strawberry')
    )   
  });

您也应该知道,您可以创建自己的索引来为您计算,然后您可以使用自定义索引执行.getAll查询并快速返回符合此约束的所有文档。

最后,对于一些既可以工作又可能在大型数组上效率较低的东西:

r.db("appname").table('food')
  .filter((row) => {
    return row('fruits')('preferred').setIntersection(['Kiwi', 'Strawberry']).count().gt(0) 
  })
© www.soinside.com 2019 - 2024. All rights reserved.