如何在 <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>
)
我们正在为我们的某些 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>
)