所以我有一个填充图像信息的数据库,我想检索按升序日期排序的字段子集。我使用以下查询来检索聚合集:
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"
}
答案 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})