我希望在MongoDB集合上以升序对某个键进行排序,并需要没有键的记录排在最后。例如:
db.coll.find({}, {key: 1}).sort({key: 1})提供:
{_id: 1}
{_id: 2, key: 1}
{_id: 3, key: 2}但应该给出以下内容:
{_id: 2, key: 1}
{_id: 3, key: 2}
{_id: 1}有没有办法用MongoDB做到这一点?
发布于 2013-05-29 19:36:17
不幸的是,mongoDB“在比较不同BSON类型的值时,MongoDB使用从最低到最高的以下比较顺序:”DOCS
当mongo生成索引时,对于那些没有获得密钥的文档,它将包含一个null。您可以使用两个查询来完成此操作,并对第一个查询使用备用索引。
如果在键字段上定义了一个空闲索引,排序将只返回那些有值的索引。这将排除没有关键字的文档。DOCS
发布于 2013-05-29 17:06:25
这是不可能的。在创建文档时,您必须将"key“设置为理论上的最大值。或者,您可以执行两个查询(一个是对所有"key“存在的地方进行排序,另一个是可选的,根本不设置"key”以补充您的结果集(如果需要的话))。由于各种业务规则的限制,后者通常是不可能的。
发布于 2013-05-30 13:17:48
这可能可以使用聚合框架来完成,但这将是相当痛苦的。您必须将缺少的键替换为高于有效键的标记值(使用按您拥有的键的类型排序的键很容易,除非键是正则表达式),然后对集合进行排序,然后剥离标记值。
使用$exist在两个常规查询中执行此操作效率会更高。
https://stackoverflow.com/questions/16806867
复制相似问题