1

我有这个 rethinkDB 查询,它基本上返回以“CA:FA”开头的“basicConstraints”字段的文档。

但是在我的一些文档中,“basicConstraints”字段不存在。

q = r.db('scanafi').table(active_table) \
.concat_map(lambda doc: doc["certificates"]\
.concat_map(lambda x: x["parsed_certificate"]["X509 extensions"])\
    .filter(lambda x: x["basicConstraints"]
.match("^CA:FA"))) \
.run()

我怎样才能在我的查询中包含所有包含此缺失字段的文档?

4

2 回答 2

0

你可以写x.has_fields('basicConstraints').not().or_(x['basicConstraints'].match("^CA:FA"))

于 2016-09-13T05:19:51.867 回答
0

似乎您x没有像常规 python dict 这样的方法(我不熟悉 rethinkdb)。你可以在这里使用一个真正的函数,带有一个 try/except 子句:

def basic_constraints(x):
    try:
        return x["basicConstraints"]
    except:  # find out what the actual exception is and put that here
        return True

q = r.db('scanafi').table(active_table) \
.concat_map(lambda doc: doc["certificates"]\
.concat_map(lambda x: x["parsed_certificate"]["X509 extensions"])\
    .filter(basic_constraints)
.match("^CA:FA"))) \
.run()## Heading ##
于 2016-09-10T15:24:20.113 回答