Coffeescript 与哈斯菲尔德相反的是什么?

Coffeescript 与哈斯菲尔德相反的是什么?,coffeescript,rethinkdb,Coffeescript,Rethinkdb,我通过添加字段deletedAt使用逻辑删除。如果我只想获取已删除的文档,它将类似于r.table('clients').hasFields('deletedAt')。我的方法有一个with deletes参数,用于确定是否排除已删除的文档 最后,#RejectionDB IRC频道的人建议我使用filter方法,这就成功了: query = adapter.table(table).filter(filters) if withDeleted query = adapter.filte

我通过添加字段
deletedAt
使用逻辑删除。如果我只想获取已删除的文档,它将类似于
r.table('clients').hasFields('deletedAt')
。我的方法有一个
with deletes
参数,用于确定是否排除已删除的文档

最后,#RejectionDB IRC频道的人建议我使用
filter
方法,这就成功了:

query = adapter.table(table).filter(filters)
if withDeleted
    query = adapter.filter (doc) ->
        return doc.hasFields 'deletedAt'
else
    query = adapter.filter (doc) ->
        return doc.hasFields('deletedAt').not()
query.run connection, (err, results) ->
...
我的问题是,为什么我必须使用
过滤器
,而不是类似于:

query = adapter.table(table).filter(filters)
query = if withDeleted then query.hasFields 'deletedAt' else query.hasFields('deletedAt').not()
...
或者类似的

提前感谢。

该函数可以在对象和序列上调用,但不能

此查询:

query.hasFields('deletedAt')
query.hasFields('deletedAt').not()
行为与此相同(在对象序列上):

但是,此查询:

query.hasFields('deletedAt')
query.hasFields('deletedAt').not()
行为如下:

query.filter((doc) -> return doc.hasFields('deletedAt')).not()
但这没有道理。您希望
过滤器内,而不是在它之后。像这样:

query.filter((doc) -> return doc.hasFields('deletedAt').not())

RejectDB的一个优点是,由于查询是在宿主语言中构建的,所以只需在您的语言中定义函数,就可以很容易地定义新的流畅语法。例如,如果您想要一个lacksFields函数,您可以用Python定义它(对不起,我不太懂coffeescript),如下所示:

然后,您可以使用一种流畅的语法,如:

lacks_fields(stream, "foo", "bar", "buzz")

谢谢@atnnn,我就是这么做的。我只是想知道是否有更流畅的方式来表达这种排斥。