好的我有一系列任务。有些人有dueDate
而有些人没有dueDate
。是否可以在单个find语句中对它们进行排序,以便对dueDate asc进行排序,然后将dueDate丢失?
// desired sort result
red; 31 oct 2014
blue; 04 nov 2014
green; 15 nov 2015
purple;
black;
目前,如果我只是按dueDate排序,那么我先得到紫色和黑色。我想强迫他们成为最后一个。
**编辑**
我想如果我可以创建一个名为hasDueDate(true / false)的计算字段,我可以这样做,然后我可以排序:{hasDueDate:1,dueDate:1}。但似乎计算字段的唯一方法是使用聚合,而Meteor无法提供。假设我可以使用集合触发器设置hasDueDate。 。 。
答案 0 :(得分:1)
找到了解决方法。在Meteor中使用simpleSchema我引入了一个名为isDueMissing
的新字段,它在插入和更新时自动设置,就像触发操作一样。
我的任务的simpleSchema片段:
due: {type: Date, optional: true},
isDueMissing: {
type: Boolean,
autoValue: function() {
if (this.siblingField('due').isSet) {
return false;
} else {
return true;
}
}
},
现在我可以像这样执行所需的排序:
Tasks.find({done: false}, {sort: {isDueMissing:1, due:1}},