我想按升序对某个键的 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 做到这一点?
这是不可能的。创建文档时,您必须将“key”设置为理论上的最大值。或者,您可以执行两个查询(一个对所有存在“key”的地方进行排序,另一个可选的另一个根本没有设置“key”以补充您的结果集(如果需要))。由于各种业务规则的限制,通常后者是不可能的。
这可能可以使用聚合框架来完成,但它会相当痛苦。您必须使用高于有效键的标记值替换丢失的键(通过使用按您拥有的键类型排序的类型的键很容易,除非键是正则表达式),然后对集合进行排序,然后去掉标记值。
在两个常规查询中使用$exist
.
我有一个类似的问题:我需要按其中包含数字的文本进行排序,并且数字应该在字符串之后显示。我们现在看到的唯一方法是创建一个索引字段,将数字替换为字符,以便将它们排在字符串之后。