从 PyMongo 获取不同的模式匹配结果(子字符串)
Get distinct pattern match results (substrings) from PyMongo
查询 MongoDB 集合中给定字段中 unique/distinct 个子字符串的最有效方法是什么?
示例文档:
{"_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]
。理想情况下,查询应该 return 只有那些子字符串的不同列表。
思路其实和你的一样(即按.
拆分得到第一个元素),然后$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)
查询 MongoDB 集合中给定字段中 unique/distinct 个子字符串的最有效方法是什么?
示例文档:
{"_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]
。理想情况下,查询应该 return 只有那些子字符串的不同列表。
思路其实和你的一样(即按.
拆分得到第一个元素),然后$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)