我通过添加字段 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/