Php MongoDB sort()删除不包含';不包含排序筛选器
我在使用MongoDB的.sort()时遇到了一个问题,因为它删除了没有排序字段的文档 例如,我有一个文档数组,有些包含“timeSent”字段,有些不包含:Php MongoDB sort()删除不包含';不包含排序筛选器,php,javascript,mongodb,Php,Javascript,Mongodb,我在使用MongoDB的.sort()时遇到了一个问题,因为它删除了没有排序字段的文档 例如,我有一个文档数组,有些包含“timeSent”字段,有些不包含: db.foo.find() = { "_id": { "$oid" : "51f25e497363055d1fde7524" }, "eventID": 159, "timeSent": 1374844250464 } { "_id": { "$oid" : "51
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现有”字段,底部排序为“timeSent不存在”。反之亦然,具体取决于ASC或DESC)
谢谢
p、 我们一直在尝试使用MongoCursor在PHP中实现这一点。Mongo可能在您之前定义的过滤字段上使用了一个索引:确保在光标上使用explain
您可以告诉Mongo,也可以重建索引,包括不带键的字段(即您)
(对不起,前面的答案,我倒过来了…Mongo可能在过滤字段上使用了您之前定义的索引:请在光标上使用解释
您可以告诉Mongo,也可以重建索引,包括不带键的字段(即您)
(对前面的答案感到抱歉,我倒过来了…您是否尝试过从mongo的控制台进行查找和排序?我做了一个快速测试,结果中显示了缺少字段的文档。我会检查我的mongoDB版本是否是最新的,是否使用了最新的驱动程序。Mongo sort命令即使在没有排序键的地方也会返回文档。谢谢,我已经检查过该版本是否是MongoDB的最新版本。-我发现问题发生在我确定索引时。如果使用下面的命令进行尝试,则会删除不存在密钥的位置。db.foo.ensureIndex({'timeSent':1},{'unique':true,'sparse':true,'dropDups':true})有什么想法吗?@Jason,这就解释了。这就是稀疏索引应该做的。您可能需要重新考虑索引。。如果您希望在该属性中使用索引,可以在没有该属性数据的文档中将其设置为null。您是否尝试过从mongo控制台进行查找和排序?我做了一个快速测试,结果中显示了缺少字段的文档。我会检查我的mongoDB版本是否是最新的,是否使用了最新的驱动程序。Mongo sort命令即使在没有排序键的地方也会返回文档。谢谢,我已经检查过该版本是否是MongoDB的最新版本。-我发现问题发生在我确定索引时。如果使用下面的命令进行尝试,则会删除不存在密钥的位置。db.foo.ensureIndex({'timeSent':1},{'unique':true,'sparse':true,'dropDups':true})有什么想法吗?@Jason,这就解释了。这就是稀疏索引应该做的。您可能需要重新考虑索引。。如果您希望在该属性中包含索引,可以在没有该属性数据的文档中将其设置为null。