MongoDB:使用投影时sort()后缺少字段

时间:2014-03-17 20:09:12

标签: mongodb

所以我有一个填充图像信息的数据库,我想检索按升序日期排序的字段子集。我使用以下查询来检索聚合集:

db.images.find({}, {rel_path: 1, date: 1}).sort({'date.year': 1, 'date.month': 1})

我希望这个查询返回一个类似这样的集合:

{
    "_id": ObjectId("530deb1060832c64291a11a7"), 
    "date": { "year: 2006, "month": 2 },
    "rel_path": "/mnt/backup/Backup/Photos/asdfasdfasdf.jpg"
}
{
    "_id": ObjectId("530de1db60832c64291a05ec"), 
    "date": { "year: 2006, "month": 5 },
    "rel_path": "/mnt/backup/Backup/Photos/qweqweqwe.jpg"
}
... <more documents> ...

然而,我得到的是:

{
    "_id": ObjectId("530deb1060832c64291a11a7"), 
    "rel_path": "/mnt/backup/Backup/Photos/asdfasdfasdf.jpg"
}
{
    "_id": ObjectId("530de1db60832c64291a05ec"), 
    "rel_path": "/mnt/backup/Backup/Photos/qweqweqwe.jpg"
}
... <more documents> ...

如果我跳过'sort()',我会从投影中得到所有字段,因此似乎'date'字段以某种方式被'sort()'调用删除。

任何人都知道这里发生了什么?

编辑:以下是按要求提供的示例文档:

{ 
    "_id" : ObjectId("530de16860832c64291a0562"), 
    "orientation" : 1, 
    "camera_make" : "Apple", 
    "camera_model" : "iPhone 4", 
    "rel_path" : "Bröllopsbilder/IMG_0997.JPG", 
    "file_size" : 1827977, 
    "date" : { "month" : "10", "year" : "2011" }, 
    "root" : "/mnt/backup/Backup/Bilder/", 
    "md5" : "fb26ebf24914d515144be5e53797744b" 
}

1 个答案:

答案 0 :(得分:1)

find()查询看起来很好,它按预期工作。我通过针对类似的数据集运行它来测试它。

这可能发生的原因是当集合中的一些文件具有&#34; date&#34;领域。尝试通过在查找查询中添加过滤条件来运行相同的查询,以仅返回那些&#34; date&#34;字段存在使用$exists运算符,即:

db.images.find({date:{$exists:true}}, {rel_path: 1, date: 1})
         .sort({'date.year': 1, 'date.month': 1})