首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套对象上的RethinkDB过滤器

嵌套对象上的RethinkDB过滤器
EN

Stack Overflow用户
提问于 2015-05-12 17:30:02
回答 1查看 1.9K关注 0票数 1

我需要通过嵌套对象过滤数据的解决方案。下面是我的JSON数据:

代码语言:javascript
复制
{
"create_datetime": 1431000977 ,
"creator": {
    "company": {
        "id": 0 ,
        "name": "Some name"
    } ,
    "manager": {
        "id": 0 ,
        "name": ""
    }
} ,
"finished_datetime": 1431615600 ,
"id": "00949296-cbea-4d4a-a780-7c8d918a7fd6" ,
"participants": [ ],
"status": "created" ,
"tender_categories": [
    1285
] ,
"views": [ ]
},
{
"create_datetime": 1431416740 ,
"creator": {
    "company": {
        "id": 70922233 ,
        "name": "Some company name"
    } ,
    "manager": {
        "id": 1003546168 ,
        "name": "Some manager name"
    }
} ,
"finished_datetime": 1432857600 ,
"id": "28e0936b-84e0-4ffc-9ad1-78a1d34e9033" ,
"participants": {
    "788190": {
        "creator": {
            "company": {
                "id": 788190 ,
                "name": "Company name"
            } ,
            "manager": {
                "id": 1003546168 ,
                "name": "Manager Name"
            }
        } ,
        "dt_applied": 1431416778 ,
        "viewed": false
    }
} ,
"status": "created" ,
"tender_categories": [1303] ,
"views": [788190]
}

我需要从这个JSON中选择一条记录,其中我们有参与者,但没有查看。我写了很多代码,但只有一个行得通。

代码语言:javascript
复制
r.db('test').table('tenders').filter(function(tender) {
  return tender('participants').coerceTo('array').map(function(participant) {
    return participant('viewed').eq(false)
  });
});

代码语言:javascript
复制
r.db('pm').table('b2b_tenders').map(function(tender) {
  return tender('participants').filter(function(key) {
    return tender(key)('viewed').eq(false)
  });
});

还有一个。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2015-05-13 00:59:15

任何类型的嵌套对象过滤都是完全可行的。在您的示例中,您似乎想要所有文档,其中所有参与者的属性view都设置为false。

这里有一个很长的,但完整的,安全的方法来检查这样的东西:

代码语言:javascript
复制
r.db('test').table('tenders')
  // Only get all documents with `participants` property
  .hasFields('participants')
  // Only get documents where the `participants` property is an object
  .filter(function (row) {
    return row('participants').typeOf().eq('OBJECT')
  })
  // Only get documents where all participants have a `viewed` property
  .filter(function (row) {
    return row('participants').coerceTo('array')
      .map(function (row) {
        return row(1).hasFields('viewed')
      })
      .distinct()
      .eq([true])
  })
  // Only get documents where all participants have a `viewed` property set to `true`
  .filter(function (row) {
    return row('participants').coerceTo('array')
      .map(function (row) {
         return row(1)('viewed').eq(false)
      })
      .distinct()
      .eq([true])
  })

根据您对即将传入的文档的了解程度,您可能会删除或更改此查询的一部分,以满足您的需要。但是,这个查询显示了如何处理嵌套属性。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30186854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档