MongoDB聚合-忽略密钥名称
我有一个问题:MongoDB聚合-忽略密钥名称,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个问题: db.events.aggregate( { $match: { "camera._id": "1NJE48", "start_timestamp": { $lte: 1407803834.07 } } }, { $sort: { "start_timestamp": -1 } }, { $limit: 2 }, { $project: { "_id": 0, "snapshots": 1 } } ) 它返回如下数据: /* 0 */ { "result
db.events.aggregate(
{ $match: { "camera._id": "1NJE48", "start_timestamp": { $lte: 1407803834.07 } } },
{ $sort: { "start_timestamp": -1 } },
{ $limit: 2 },
{ $project: { "_id": 0, "snapshots": 1 } }
)
它返回如下数据:
/* 0 */
{
"result" : [
{
"snapshots" : {
"1401330834010" : {
"uploaded_timestamp" : 1401330895,
"filename_timestamp" : 1401330834.01,
"timestamp" : 1401330834.01
},
"1401330835010" : {
"uploaded_timestamp" : 1401330896,
"filename_timestamp" : 1401330835.01,
"timestamp" : 1401330835.01
},
"1401330837010" : {
"uploaded_timestamp" : 1401330899,
"filename_timestamp" : 1401330837.01,
"timestamp" : 1401330837.01
}
}
},
{
"snapshots" : {
"1401319837010" : {
"uploaded_timestamp" : 1401319848,
"filename_timestamp" : 1401319837.01,
"timestamp" : 1401319837.01
},
"1401319838010" : {
"uploaded_timestamp" : 1401319849,
"filename_timestamp" : 1401319838.01,
"timestamp" : 1401319838.01
},
"1401319839010" : {
"uploaded_timestamp" : 1401319850,
"filename_timestamp" : 1401319839.01,
"timestamp" : 1401319839.01
}
}
}
],
"ok" : 1
}
我想要一组快照:
/* 0 */
{
"result" : [
{
"uploaded_timestamp" : 1401330895,
"filename_timestamp" : 1401330834.01,
"timestamp" : 1401330834.01
},
{
"uploaded_timestamp" : 1401330896,
"filename_timestamp" : 1401330835.01,
"timestamp" : 1401330835.01
},
{
"uploaded_timestamp" : 1401330899,
"filename_timestamp" : 1401330837.01,
"timestamp" : 1401330837.01
},
{
"uploaded_timestamp" : 1401319848,
"filename_timestamp" : 1401319837.01,
"timestamp" : 1401319837.01
},
{
"uploaded_timestamp" : 1401319849,
"filename_timestamp" : 1401319838.01,
"timestamp" : 1401319838.01
},
{
"uploaded_timestamp" : 1401319850,
"filename_timestamp" : 1401319839.01,
"timestamp" : 1401319839.01
}
],
"ok" : 1
}
即没有关键名称。我很难理解当关键字名称像这里一样是唯一的时如何处理聚合框架。问题是,知道关键字名称的唯一方法是查看文档本身。一般来说,MongoDB不能很好地处理这种情况。您需要了解自己文档的结构,即了解密钥是什么以及它们的类型 我不知道您的用例,也没有示例文档,因此我无法评估您的数据模型,但将键作为值通常是一个坏主意,因为当您不能说文档上的键应该是什么时,您将遇到许多限制。考虑使用数组来代替快照的嵌入对象,或者使用类似于的键值对数组。
{
...
"result" : [
{
"snapshots" : [
{
"key" : "1401330834010",
"value" : {
"uploaded_timestamp" : 1401330895,
"filename_timestamp" : 1401330834.01,
"timestamp" : 1401330834.01
},
}
]
},
...
}
如果您提供一份示例文档和一些关于您试图实现的目标的详细信息,我很乐意提供更完整的建议。想出了一个权宜之计。我们将在一个事件的数组中存储一个快照键数组。它本质上起着索引的作用。然后,我们可以执行两个查询—一个用于获取密钥并进行筛选,另一个用于正确获取所需的单个快照
它既不美观,也不向后兼容,但有望加快速度。您必须使用一些JavaScript解析上传的时间戳、文件名时间戳、时间戳字段。我不认为聚合管道可以处理这样的唯一ObjectID…谢谢。更改模式是一项较大的任务,但我们已将其添加到列表中。