【问题标题】:Get distinct pattern match results (substrings) from PyMongo从 PyMongo 获取不同的模式匹配结果(子字符串)
【发布时间】:2022-01-25 06:48:59
【问题描述】:

在 MongoDB 集合中查询给定字段中唯一/不同子字符串的最有效方法是什么?

示例文件:

{"_id": "1234.abc.test1", "some_key": "some_value"}
{"_id": "1234.abc.test2", "some_key": "some_value"}
{"_id": "0420.def.test3", "some_key": "some_value"}

以上文档 ID 遵循内部命名空间约定。我需要知道该命名空间的所有不同的第一个元素是什么。

对上述集合的查询的期望输出:

1234
0420

我试图避免将整个数据集取回,然后只在每一行上执行row['_id'].split('.')[0]。理想情况下,查询应该只返回这些子字符串的不同列表。

【问题讨论】:

    标签: python mongodb mongodb-query pymongo-3.x


    【解决方案1】:

    这个想法其实和你的一样(即通过.分割得到第一个元素),然后$group他们得到不同的记录。

    db.collection.aggregate([
      {
        $project: {
          first: {
            "$arrayElemAt": [
              {
                "$split": [
                  "$_id",
                  "."
                ]
              },
              0
            ]
          }
        }
      },
      {
        "$group": {
          "_id": "$first"
        }
      }
    ])
    

    这里是Mongo playground 供您参考。

    这是上述查询的 PyMongo 实现:

    pipeline = [
        {"$project": {"first": {"$arrayElemAt": [{"$split": ["$_id", "."]}, 0]}}},
        {"$group": {"_id": "$first"}}
    ]
    result = self.collection.aggregate(pipeline=pipeline, allowDiskUse=False)
    

    【讨论】:

    • @muadDweeb 感谢您帮助补充 PyMongo 实施
    猜你喜欢
    • 2012-08-22
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多