【发布时间】:2013-08-01 11:56:58
【问题描述】:
我在使用 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)
谢谢
附言一直在尝试使用 MongoCursor 在 PHP 中实现这一点。
【问题讨论】:
-
您是否尝试过从 mongo 的控制台进行查找和排序?我做了一个快速测试,结果中出现了缺少字段的文档。
-
我会检查我的 mongoDB 版本是否是最新的,以及我是否使用了最新的驱动程序。即使排序键不存在,Mongo 排序命令也会返回文档。
-
谢谢,我检查了该版本是 MongoDB 的最新版本。 - 当我确保索引时,我发现问题发生了。如果您使用以下命令尝试它,它会删除不存在密钥的位置。 db.foo.ensureIndex({'timeSent':1},{'unique':true,'sparse':true,'dropDups':true}) 有什么想法吗?
-
@Jason 解释它。这就是稀疏索引应该做的事情。您可能需要重新考虑您的索引。如果您想要该属性中的索引,您可以在没有该属性数据的文档上将其设置为 null。
标签: php javascript mongodb