Mongodb 如何对每个文档上可能未设置的字段进行排序

Mongodb 如何对每个文档上可能未设置的字段进行排序,mongodb,meteor,Mongodb,Meteor,我有一个任务集合,通过将“complete”字段设置为“true”,可以将其标记为已完成。问题是,可能不会在每个文档上都设置此字段,因此当我对其进行排序时,没有此字段的文档将排序在complete=false的文档之前(显然,complete=true的文档之前) 我希望具有不存在“complete”字段的任务在排序时被视为complete=false。在查询中可以这样做吗?还是我必须确保所有文档都设置了字段?达到预期效果的最佳方法是什么?除非使用聚合框架,否则无法在投影中创建虚拟/计算列,从而

我有一个任务集合,通过将“complete”字段设置为“true”,可以将其标记为已完成。问题是,可能不会在每个文档上都设置此字段,因此当我对其进行排序时,没有此字段的文档将排序在complete=false的文档之前(显然,complete=true的文档之前)


我希望具有不存在“complete”字段的任务在排序时被视为complete=false。在查询中可以这样做吗?还是我必须确保所有文档都设置了字段?达到预期效果的最佳方法是什么?

除非使用聚合框架,否则无法在投影中创建虚拟/计算列,从而在MongoDB中进行排序

我同意@Stennie的观点,也许最好的选择是总是添加带有默认值的字段。但是,您将承担存储成本

您可以使用聚合框架,但这可能太遥远了—没有DB游标,结果大小有限,等等

如果按降序(-1)排序,那么这些文档将显示在结果的最后一个,但看起来这不是您想要的?可能吧

如果使用稀疏索引或
$exists。。。false
则可以从搜索结果中完全删除缺少字段的文档。如果需要,您可以在第二次查询中获得它们


因此,基本上您在速度、存储空间和复杂性之间进行了权衡。

可预测排序的最佳选择是,在创建文档时,在每个文档中添加
complete
字段,默认值为
false
。感谢您的帮助!我通过使用钩子(通过)将字段添加到insert上来强制字段的存在,从而解决了这个问题