【问题标题】:How to join two collection in mongo without lookup如何在不查找的情况下在 mongo 中加入两个集合
【发布时间】:2017-12-25 12:13:30
【问题描述】:

我有两个收藏,分别是postcomment。 模型结构如下。 我想使用聚合查询帖子并按长度和之类的 cmets 排序,目前我可以在以下查询语句中查询长度和之类的帖子 cmets。

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

我想查询帖子集合并按外国cmets喜欢的长度排序。在mongo 2.6中有最好的方法吗?

发布

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

评论

/* 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"
    ]
}

查询sum之类的post cmets

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】:

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

    您需要进行多个查询:一个查询您的post 收藏,一个查询您的comment 收藏。

    如果您必须执行单个查询,请考虑将两种类型的文档存储在一个集合中(使用一些标识符属性,让您在查询中过滤帖子或 cmets)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多