如何在 <Filter /> 输入中映射 mongodb 比较(例如 $ne)

How to map a mongodb comparison (e.g. $ne) inside a <Filter /> input

我们正在为我们的某些 mongodb collection(例如用户)使用一些软删除功能。这些 collection 的 deletedAT 属性为 null 或日期。我需要使用过滤器输入来显示活动 (deletedAt = null) 或非活动(例如,deletedAt = ISODate("2019-07-18T20:45:45.340Z"))collection 项目。

这适用于 <List /> filter 道具

<List title="User List" {...props} filter={{ deletedAt: null }} >
OR
<List title="User List" {...props} filter={{ deletedAt: { $ne: null } }} >

它实际上也适用于 filterDefaultValues prop

<List title="User List" {...props} filterDefaultValues={{ deletedAt: null }} >
OR
<List title="User List" {...props} filterDefaultValues={{ deletedAt: { $ne: null } }} >

但是,我无法在 <Filter /> 输入中完成这项工作,例如

export const UserFilter = (props) => (
  <Filter {...props}>
    <RadioButtonGroupInput source="deletedAt" choices={[
      { id: null, name: 'No' },
      { id: '$ne: null', name: 'Yes' },
    ]} alwaysOn />
  </Filter>

)

我遇到这样的错误 Cast to date failed for value "$ne: null" at path "deletedAt" for model "User" 我尝试了多种不同的语法,包括尝试以 objects、字符串等形式传递,但没有成功。我怀疑过滤器输入和 <List />filter/filterDefaultValues 道具之间的请求存在差异。我希望在正确的方向上推动创建一个过滤器输入来处理 mongodb 比较查询运算符?

这最终成功了:

<List title="User List" {...props} bulkActionButtons={<ConfirmBulkDelete />} {...paginationProps} filters={ <UserFilter /> } filterDefaultValues={{ deletedAt: { $type: 'null' } }} >
export const UserFilter = (props) => (
    <SelectInput label="Status" source="deletedAt[$type]" choices={[
      { id: 'null', name: 'Active' },
      { id: 'date', name: 'Archived' },
    ]} alwaysOn />
  </Filter>
)