Mongodb 从多个嵌入文档中查找最长日期
我收集的许多文档之一如下所示:Mongodb 从多个嵌入文档中查找最长日期,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我收集的许多文档之一如下所示: { "_id" :123, "a" :[ { "_id" : 1, "dt" : ISODate("2013-06-10T19:38:42Z") }, { "_id" : 2, "dt" : ISODate("2013-02-10T19:38:42Z") } ], "b" :[
{ "_id" :123,
"a" :[
{ "_id" : 1,
"dt" : ISODate("2013-06-10T19:38:42Z")
},
{ "_id" : 2,
"dt" : ISODate("2013-02-10T19:38:42Z")
}
],
"b" :[
{ "_id" : 1,
"dt" : ISODate("2013-02-10T19:38:42Z")
},
{ "_id" : 2,
"dt" : ISODate("2013-23-10T19:38:42Z")
}
],
"c" :[
{ "_id" : 1,
"dt" : ISODate("2013-03-10T19:38:42Z")
},
{ "_id" : 2,
"dt" : ISODate("2013-13-10T19:38:42Z")
}
]
}
我想找到整个文档的最长日期(a、b、c)。
我现在的解决方案是,我遍历所有根
\u id
,然后在聚合框架中为每个a
,b
,c
为每个根文档执行$match
。这听起来效率很低,有更好的想法吗?你的问题与我的非常相似。看看吧
与该解决方案一样,可以使用MongoDB的聚合框架处理您的问题,使用
$project
和$cond
操作符重复展平文档,同时在每一步保留最大值 你是说a、b和c中所有日期的最大值?如果a、b、c等键事先不知道,你需要尝试使用map reduce。你尝试过了吗?@ iNoSPG是的……有两种选择:蛮力+线程,或者使树变平并排序它们。如果你想对你的集合运行的查询类型不能被你的模式干净地支持,你应该考虑把你的模式变成一个。