Python Pymongo只包括以名称开头的字段
例如,如果这是我的记录Python Pymongo只包括以名称开头的字段,python,mongodb,pymongo,Python,Mongodb,Pymongo,例如,如果这是我的记录 { "_id":"123", "name":"google", "ip_1":"10.0.0.1", "ip_2":"10.0.0.2", "ip_3":"10.0.1", "ip_4":"10.0.1", "des
{
"_id":"123",
"name":"google",
"ip_1":"10.0.0.1",
"ip_2":"10.0.0.2",
"ip_3":"10.0.1",
"ip_4":"10.0.1",
"description":""}
我只想得到那些以“ip_”开头的字段。考虑我有500个字段,其中只有15个是以“IPi”< /P>开头的。
我们可以这样做以获得输出-db.collection.find({id:'123},{'ip*':1})
输出-
{
"ip_1":"10.0.0.1",
"ip_2":"10.0.0.2",
"ip_3":"10.0.1",
"ip_4":"10.0.1"
}
我不知道有什么方法可以指定一个表达式来决定投影哪些散列键。MongoDB有很多功能,但它们处理数组和文本搜索 如果您有一组固定的ip字段,您可以简单地请求所有这些字段,而不管特定文档中存在哪些字段,例如,project with
{ip_1: true, ip_2: true, ...}
下面的聚合查询使用PyMongo返回字段名以“ip\开头的文档 请注意使用的各种聚合运算符:
$filter
,$regexMatch
,$objectToArray
,$arrayToObject
。聚合管道包括两个阶段$project
和$replaceway
pipeline = [
{
"$project": {
"ipFields": {
"$filter" : {
"input": { "$objectToArray": "$$ROOT" },
"cond": { "$regexMatch": { "input": "$$this.k" , "regex": "^ip" } }
}
}
}
},
{
"$replaceWith": { "$arrayToObject": "$ipFields" }
}
]
pprint.pprint(list(collection.aggregate(pipeline)))