【发布时间】:2017-01-05 22:27:07
【问题描述】:
我有两个不同的文档,我想用一个匹配字段(在本例中为idOrdem)进行分组。两者都有一个timestamp 字段,只有一个字段具有timeElapsed 字段。我需要在聚合中返回所有这些信息,但我得到的结果似乎不正确。我得到了timeElapsed 字段的null 结果,其中肯定有一个包含该字段的文档。
我的陈述有什么问题?
db.Logging.aggregate( [
{ $match : { $or : [ { "action":"resetDslVerify"}, { "action":"assia/reset/RequestQueryOs" } ] } },
{ $group : {
_id : "$idOrdem",
timestamp1: { $first: '$timestamp' },
timestamp2: { $last: '$timestamp' },
timeElapsed: { $first: '$timeElapsed' }
}
},
{ $sort: { timestamp: -1} } ]
);
意想不到的结果:
{ "_id" : "159251", "timestamp1" : 1483456382058, "timestamp2" : 1483456382058, "timeElapsed" : 1091 }
{ "_id" : "134601", "timestamp1" : 1482949316671, "timestamp2" : 1482949349410, "timeElapsed" : 821 }
{ "_id" : "168801", "timestamp1" : 1483560599899, "timestamp2" : 1483560564505, "timeElapsed" : null }
{ "_id" : "158901", "timestamp1" : 1483452698756, "timestamp2" : 1483452673424, "timeElapsed" : null }
{ "_id" : "135001", "timestamp1" : 1482949653229, "timestamp2" : 1482949711541, "timeElapsed" : 838 }
将idOrdem 与我需要的所有信息相匹配的文档示例:
s-1:PRIMARY> db.Logging.find( { $or : [ { "action":"resetDslVerify"}, { "action":"assia/reset/RequestQueryOs" } ], "idOrdem":"135001" } );
{ "_id" : ObjectId("586404155b88db1209c3f998"), "success" : true, "action" : "assia/reset/RequestQueryOs", "timestamp" : 1482949653229, "httpCode" : 200, "timeElapsed" : 838, "idOrdem" : "135001", "creator" : "TecnicoVirtual" }
{ "_id" : ObjectId("5864044f5b88db1209c3f99b"), "success" : true, "action" : "resetDslVerify", "timestamp" : 1482949711541, "terminal" : "2134599099", "httpCode" : 200, "idOrdem" : "135001", "idOrdem" : "135001", "result" : "OK", "timestamp" : 1482949711541, "isResetDslSuccess" : true, "creator" : "TecnicoVirtual" }
【问题讨论】:
-
您也可以展示您的预期结果吗?
-
“意外结果”中的数据与下方“匹配文件”中的数据不对应。例如,您能否提供正在生成的数据: { "_id" : "158901", "timestamp1" : 1483452698756, "timestamp2" : 1483452673424, "timeElapsed" : null }
标签: mongodb mongodb-query aggregation-framework