如何在Meteor Mongodb中以两种不同的方式对单个字段进行排序

时间:2014-11-13 12:04:31

标签: mongodb meteor mongodb-query

好的我有一系列任务。有些人有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。 。 。

1 个答案:

答案 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}},

enter image description here