Waterline + Sails.js:将没有排序字段的文档排序到结果结尾
Waterline + Sails.js: Sort documents without the sort field to end of results
我有一个模型Event.js:
var Event = {
schema: true,
attributes: {
time: {
type: "datetime"
// There can be events which don't have 'time' field
}
// Some more fields, some of which connect to other models
}
}
module.exports = Event;
我想获取所有基于时间的事件。它们应按 time
升序排序,但所有不带 time
的事件应推到最后。
如何在不使用 .native()
的情况下执行此操作?我不想使用 'native' 因为我还想填充 Event
.
中的几个字段
编辑:
假设我在 collection 中有以下文件:
// For simplicity I am using human readable date format
{id: 1, time: "5th Jan 2017"}
{id: 2}
{id: 3, time: "14th Dec 2016"}
{id: 4, time: "3rd Mar 2017"}
{id: 5}
它们应该这样排序:
{id: 3, time: "14th Dec 2016"}
{id: 1, time: "5th Jan 2017"}
{id: 4, time: "3rd Mar 2017"}
{id: 2}
{id: 5}
Sails.js 将 null
字段转换为 "low value" 属性进行排序。有两种可能的解决方法。
第一个是使用 defaultsTo
属性将其设置为无效值,如 "ǸA"
。但是您不能使用 datetime
进行验证,必须创建一个自定义验证,尝试创建一个日期,并检查它是否有效。
您的模型将是:
time: {
type: "string",
defaultsTo: "NA"
}
并使用自定义验证来保证您的字符串是使用 Moment 库的日期:
Moment(myDate).isValid()
取决于您的数据库。与验证为 IsoDate String
的字符串字段相比,使用日期字段没有真正的优势。我已经在 MongoDB.
上测试过了
您可以在 sails documentation 中找到大量自定义验证的示例。
另一种选择。更简单的是,只是过滤空字段,不显示它。
然后你需要对 API 进行两次调用,但你可以将它封装到一个控制器函数中。
过滤蓝图中的空字段API。将是:
http://localhost:1337/event/where={"time":{"!":null}}
我有一个模型Event.js:
var Event = {
schema: true,
attributes: {
time: {
type: "datetime"
// There can be events which don't have 'time' field
}
// Some more fields, some of which connect to other models
}
}
module.exports = Event;
我想获取所有基于时间的事件。它们应按 time
升序排序,但所有不带 time
的事件应推到最后。
如何在不使用 .native()
的情况下执行此操作?我不想使用 'native' 因为我还想填充 Event
.
编辑:
假设我在 collection 中有以下文件:
// For simplicity I am using human readable date format
{id: 1, time: "5th Jan 2017"}
{id: 2}
{id: 3, time: "14th Dec 2016"}
{id: 4, time: "3rd Mar 2017"}
{id: 5}
它们应该这样排序:
{id: 3, time: "14th Dec 2016"}
{id: 1, time: "5th Jan 2017"}
{id: 4, time: "3rd Mar 2017"}
{id: 2}
{id: 5}
Sails.js 将 null
字段转换为 "low value" 属性进行排序。有两种可能的解决方法。
第一个是使用 defaultsTo
属性将其设置为无效值,如 "ǸA"
。但是您不能使用 datetime
进行验证,必须创建一个自定义验证,尝试创建一个日期,并检查它是否有效。
您的模型将是:
time: {
type: "string",
defaultsTo: "NA"
}
并使用自定义验证来保证您的字符串是使用 Moment 库的日期:
Moment(myDate).isValid()
取决于您的数据库。与验证为 IsoDate String
的字符串字段相比,使用日期字段没有真正的优势。我已经在 MongoDB.
您可以在 sails documentation 中找到大量自定义验证的示例。
另一种选择。更简单的是,只是过滤空字段,不显示它。 然后你需要对 API 进行两次调用,但你可以将它封装到一个控制器函数中。
过滤蓝图中的空字段API。将是:
http://localhost:1337/event/where={"time":{"!":null}}