Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pymongo只包括以名称开头的字段_Python_Mongodb_Pymongo - Fatal编程技术网

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)))