1

我正在尝试排除被删除的对象。deleted_at 是一个日期时间字段,如果对象被删除,它有一个时间戳,否则它为零。

这是我的代码:

tire.search(load: true, page: params[:page], per_page: 2) do
  query { string params[:query], default_operator: "AND" } if params[:query].present?
  filter :missing, field: :deleted_at
end

但这对我的输出没有任何作用..

任何提示?

4

1 回答 1

2

所以基本上有 3 个状态可以存在一个字段/属性。

  1. 它在文档中不存在。
  2. 它确实存在并且值设置为null
  3. 它确实存在并且值是有效的(或非空的)

如果我理解正确,您需要deleted_at处于状态 1 或 2 的文档。我认为您需要创建与此等效的文档:

"filter" : {
    "missing" : { 
        "field" : "deleted_at",
        "existence" : true,
        "null_value" : true
    }
}

内部缺失过滤器将找到所有处于状态 1 ( existence: true) 或状态 2 ( null_value: true) 的文档。

祝你好运!

于 2013-08-01T14:46:54.117 回答