coffeescript - 与 hasFields 相反的是什么?

标签 coffeescript rethinkdb

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

最后,#rethinkdb IRC channel 的人们建议我使用 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) ->
...

我的问题是为什么我必须使用 filter而不是这样的:

query = adapter.table(table).filter(filters)
query = if withDeleted then query.hasFields 'deletedAt' else query.hasFields('deletedAt').not()
...

或者类似的东西。

提前致谢。

最佳答案

hasFields函数可以在对象和序列上调用,但是 not不能。

此查询:

query.hasFields('deletedAt')

与此行为相同(针对对象序列):

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

但是,这个查询:

query.hasFields('deletedAt').not()

行为如下:

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

但这没有意义。您希望 not 位于 filter 内部,而不是在其之后。像这样:

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

关于coffeescript - 与 hasFields 相反的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586880/

相关文章:

javascript - 为什么所有的 CoffeeScript 文件总是同时执行 Rails

javascript - RethinkDB JavaScript 日期过滤器

python - 在 rethinkdb 上使用 python 中的 lambda 进行多重过滤?

mysql - RethinkDb 查询两个日期列之间的当前日期时间

javascript 名称值不起作用

javascript - 如何从事件访问 jquery 函数属性

javascript - 获取 CoffeeScript 对象的所有实例方法

javascript - 使用 CoffeeScript 支持设置 Node.js/Geddy 应用程序

python - 在 Python 的 Model 类中模拟数据库连接

javascript - 在 deepstream.io 中的第一个 getRecord 上创建 RethinkDB 表