我有一个模型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
中的几个字段。
修改
假设我在集合中有以下文件:
// 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}
答案 0 :(得分:2)
Sails.js将null
字段转换为“低值”属性以进行排序。有两种可能的解决方法。
第一个是使用defaultsTo
属性将其设置为无效值,如"ǸA"
。但是您不能使用datetime
进行验证,必须创建自定义验证,尝试创建日期,并检查它是否有效。
您的模型将是:
time: {
type: "string",
defaultsTo: "NA"
}
并使用自定义验证来确保您的字符串是使用Moment库的日期:
Moment(myDate).isValid()
取决于您的数据库。在验证为IsoDate String
的字符串字段上使用Date字段没有任何优势。我在 MongoDB 上测试了它。
您可以在sails documentation中找到大量自定义验证示例。
另一种选择。更简单的是,只是过滤空字段,不显示它。 然后,您需要对API进行两次调用,但您可以将其封装到控制器函数中。
过滤蓝图API中的空字段。将是:
http://localhost:1337/event/where={"time":{"!":null}}