我有以下SQL(mysql)查询,我想将它转换为MongoDB。它基本上是获得最高1号文件各组:MongoDB - 查询 - 每个组的顶部文档
SELECT A.*
FROM ads AS A
INNER JOIN (SELECT id
FROM ads
WHERE userId = 1
GROUP BY ad_code
HAVING MAX(ad_timestamp)) AS B ON B.id = A.id
从我读迄今有几种方法来聚合数据在MongoDB中(在MongoDB aggregation comparison: group(), $group and MapReduce更多信息):
- 组(在分片集合不工作)
- 的MapReduce
- $组
我我试图用MongoDB汇总框架来解决这个问题。到目前为止,我有这样的:
db.ads.aggregate([
{ $match: { userId: ObjectId("5976e215769d8a4a4d75c514") } },
{
$group: {
_id: "$ad_code",
latestTimestamp: { $max: "$ad_timestamp" },
}
}
])
但这并不返回匹配的文件,只需将广告代码和最大时间戳的_ids,所以我不能用数据来获得整个文件。
这个问题看起来很重要,但它似乎并没有解决我有同样的问题: Query one document per association from MongoDB
感谢
编辑重复标志:这个问题是别人不同,与我链接的问题不同,因为解决方案使用$first
操作数查找1匹配,并使用docIds
字段检索未汇总的原始文档。这与其他问题接近解决方案的方式不同,部分原因是随着时间的推移MongoDB的发展。
谢谢谢谢谢谢你,这东西是真的可怕的开始。 – mils
还有一个快速后续问题 - 这是否意味着如果我没有明确使用“latestTimestamp”字段,我不需要声明它?还是需要为$第一个条件?谢谢 – mils
@mils如果你不使用'latestTimestamp',你可以从**'$ group' **阶段删除它,它不会影响结果 – felix