如何在没有查找的情况下在mongo中加入两个集合

问题描述 投票:1回答:1

我有两个收藏,有名称是帖子和评论。模型结构如下。我想使用聚合查询帖子并按长度总和等注释排序,目前我可以在下面的查询语句中查询长度总和的帖子评论。

我的问题是如何在Mongo 2.6版中查询帖子和加入评论集合。我知道Mongo 3.2之后有一个查找功能。

我想查询收集和排序的外国评论喜欢长度。在mongo 2.6中有最好的方法吗?

post

{
    "_id": ObjectId("5a39e22c27308912334b4567"),
    "uid": "0",
    "content": "what is hello world mean?",
}

comment

/* 1 */
{
    "_id": ObjectId("5a595d8c2703892c3d8b4567"),
    "uid": "1",
    "post_id": "5a39e22c27308912334b4567",
    "comment": "hello world",
    "like": [
        "2"
    ]
}
/* 2 */
{
    "_id": ObjectId("5a595d8c2703892c3d8b4512"),
    "uid": "2",
    "post_id": "5a39e22c27308912334b4567",
    "comment": "hello stackoverflow",
    "like": [
        "1",
        "2"
    ]
}

Query a post comments like sum

db.getCollection('comment').aggregate([
    {
        "$match": {
            post_id: "5a39e22c27308912334b4567"
        }
    },
    {
        "$project": {
            "likeLength": {
                "$size": "$like"
            },
            "post_id": "$post_id"
        }
    },
    {
        "$group": {
            _id: "$post_id",
            "likeLengthSum": {
                "$sum": "$likeLength"
            }
        }
    }
])
mongodb aggregation-framework
1个回答
2
投票

没有“最佳”的查询方式,因为它实际上取决于您的特定需求,但是......您不能跨多个集合执行单个查询(除了以后版本中的$lookup聚合管道函数,因为您已经是知道的)。

您需要进行多个查询:一个是post集合,另一个是comment集合。

如果必须执行单个查询,则考虑将两种类型的文档存储在单个集合中(使用某些标识符属性可以过滤查询中的帖子或注释)。

© www.soinside.com 2019 - 2024. All rights reserved.