Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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如何定义附加值的键 Mongodb集合如下: 它在pymongo工作: 现在我想创建一个列表来附加键的值,比如“a.x”或“b.w”,我按照下面的方式编写代码,但是没有得到任何结果。_Python_Pymongo - Fatal编程技术网

Python pymongo如何定义附加值的键 Mongodb集合如下: 它在pymongo工作: 现在我想创建一个列表来附加键的值,比如“a.x”或“b.w”,我按照下面的方式编写代码,但是没有得到任何结果。

Python pymongo如何定义附加值的键 Mongodb集合如下: 它在pymongo工作: 现在我想创建一个列表来附加键的值,比如“a.x”或“b.w”,我按照下面的方式编写代码,但是没有得到任何结果。,python,pymongo,Python,Pymongo,有人能帮我吗?谢谢使用Mongo聚合管道,您关心的字段可以投影并替换返回的根文档中的返回字段。e、 g 这样,您就可以继续使用结果扩展相应的列表 tolist = lambda x: x if isinstance(x, list) else [x] data1.extend(tolist(result['a_x'])) data2.extend(tolist(result['b_w'])) 我终于找到了解决这个问题的最佳方法,创建一个在数据库中找到的数据目录,然后定义要选择的键为“objk

有人能帮我吗?谢谢使用Mongo聚合管道,您关心的字段可以投影并替换返回的根文档中的返回字段。e、 g

这样,您就可以继续使用结果扩展相应的列表

tolist = lambda x: x if isinstance(x, list) else [x]

data1.extend(tolist(result['a_x']))
data2.extend(tolist(result['b_w']))

我终于找到了解决这个问题的最佳方法,创建一个在数据库中找到的数据目录,然后定义要选择的键为“objkey”
def get_dict_in(Dict,objkey,default):
  for key,value in Dict.items():
    if key == objkey:
        return value
    else:
        if type(value) is dict:  # Note: import types
            val=get_dict_in(value,objkey,default)
            if default not in val:
                return val
return default
e、 g


为什么不从数据库中检索这些值?在Python中检索值是不必要的工作。“result=next(cur)的输出应该是'a_x':1,'b_w':1对吗?但是我得到的是空值,比如'a_w':[],'b_w':[]不,应该是
{'a_w':1,'b_w':[5,8]}
。我使用了您为
col提供的示例
是的,我得到了,我的问题是,当我使用这种方法处理一个关于数千条记录的大型数据库时,返回值为空。您是否找到了它为空的原因?您做了什么来解决它?我打印了“cur”,发现其中大多数为空,少数为空,这是next(cur)的结果总是第一个,我写了一个while循环,将值扩展到数据列表。谢谢。
 `data1=[]
 data2=[]
 finddata={}
 for data in col.find({}):
    finddata=dict(data)
    for key,value in finddata.items():
       if key == "a.x":      #if key=="a" will works
          data1.append(value)
       if key == "b.w":
          data2.append(value)`
pipeline = [
    {'$project': {'a.x':1, 'b.w': 1}},
    {'$replaceRoot': {'newRoot': {'a_x': '$a.x', 'b_w': '$b.w'}}}
] 

cur = db.keyes.aggregate(pipeline)
result = next(cur)
tolist = lambda x: x if isinstance(x, list) else [x]

data1.extend(tolist(result['a_x']))
data2.extend(tolist(result['b_w']))
def get_dict_in(Dict,objkey,default):
  for key,value in Dict.items():
    if key == objkey:
        return value
    else:
        if type(value) is dict:  # Note: import types
            val=get_dict_in(value,objkey,default)
            if default not in val:
                return val
return default
dictA={"a":{"x":1,"y":2},"b":[{"w":5,"z":7},{"w":8,"z":5}]}
value=get_dict_in(dictA,'x',None)