MongoDB sort()会删除那些没有;不包含排序筛选器


MongoDB sort() removes documents that don't contain sort filter

我在使用MongoDB的.sort()时遇到问题,因为它删除了没有排序字段的文档。

例如,我有一组文档,有些包含"timeSent"字段,有些不包含:

db.foo.find() = 
    {
      "_id": { "$oid" : "51f25e497363055d1fde7524" },
      "eventID": 159,
      "timeSent": 1374844250464
    }
    {
      "_id": { "$oid" : "51f25e497363055d1fde7525" },
      "eventID": 158,
      "timeSent": 1374844250465
    }
    {
      "_id": { "$oid" : "51f25e497363055d1fde7526" },
      "eventID": 157
    }

使用.sort()删除不存在"timeSent"的文档。

db.foo.find().sort({"timeSent":1}).skip(0).limit(30)

我想知道Mongo是否有一种方法可以像SQL一样排序并返回完整的文档。(按顶部的"timeSent existing"字段和底部的"timeSent not existing)字段排序。反之亦然,取决于ASC或DESC)

感谢

p.s.一直在尝试使用MongoCursor在PHP中实现这一点。

Mongo可能在您之前定义的过滤字段上使用了sparse索引:请在光标上使用explain

您可以告诉Mongo不要使用该索引,也可以重建包含没有键的字段的索引(即,创建一个非sparse索引)。

(很抱歉之前的答案,我把它倒过来了…)