MongoDB sort()删除不包含排序过滤器的文档

时间:2013-08-01 11:56:59

标签: php javascript mongodb

我在使用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中实现这一目标。

1 个答案:

答案 0 :(得分:2)

Mongo可能在您之前定义的过滤字段上使用sparse索引:在游标上使用explain来确定。

你可以告诉Mongo not to use that index,或者重建索引,包括没有密钥的字段(即你create a non sparse index)。

(对不起前面的回答,我倒退了......)