将Sql转置到Mongo:按祖父母id分组,显示最后一个孩子和父母id使用,按max分组



我是mongodb的初学者,有一个sql查询,我想转换,我有麻烦。

此sql将为您提供每个祖父创建的最后一个子。

select parent.grandparent_id, parent.id , max(child.id) 
from parent
join child on child.parent_id = parent.id
group by parent.grandparent_id

在mongodb我有一个文档结构:

grandparent_id, parent_id, child_id

最接近的是:

db.forum_topic_post_stats.aggregate([
{$group: {_id: "$grandparent_id", last_grandchild: { $max: "$child_id" } } },
])

我遇到的麻烦是访问parent_id,因为返回的文档只给出:

_id: <$grandparent_id>
last_grandchild: <$child_id>

如何显示父元素?我已经尝试使用项目,但当我指定父结果为空。

任何想法?

您的数据是关系的,但这并不意味着您不能将其放入MongoDB。

我假设你的数据是这样的:

{
    "_id" : ObjectId("55a7c3bba13242e55e3a8848"),
    "parent_id" : 245,
    "parent" : "John doe",
    "grandparent_id" : 1,
    "child_id" : 34
}
{
    "_id" : ObjectId("55a7c3cfa13242e55e3a8849"),
    "parent_id" : 246,
    "parent" : "Johnny Doe",
    "grandparent_id" : 2,
    "child_id" : 36
}

你的查询非常接近。试着运行这个命令来保持parent_id在键中。

 db.parent.aggregate([{$group: { _id: { grandparent: "$grandparent_id", parent: "$parent_id"}, last_grandchild: { $max: "$child_id" } } } ])

最终得到如下结果:

{ "_id" : { "grandparent" : 2, "parent" : 246 }, "last_grandchild" : 36 }
{ "_id" : { "grandparent" : 1, "parent" : 245 }, "last_grandchild" : 34 }

最新更新