我有一个具有以下结构的集合:
{'cnpj_fundo': '08.807.621/0001-93',
'pl_posicao': 'R$ 8.654.202,31',
'posicao': [{'empresa_ligada': 'Não',
'quantidade_vendas': '',
'detalhes': "{'Tipo de Ativo:': ['Fundo de Investimento e de Cotas'], 'Fundo:': ['BTGP ACCESS SELECTION FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO MULTIMERCADO'], 'Tipo de Aplicação:': ['Cotas de Fundos'], 'CNPJ:': ['05.892.577/0001-79']}",
'categoria': '',
'valor_vendas': '',
'perc_carteira': '99,76',
'quantidade_compras': '',
'posicao_final': '8.633.395,56',
'classificacao': '',
'valor_custos ': '',
'link': 'CDADetAplic.aspx?PkCDAAplic=7234077',
'valor_compras': '4.657.681'},
{'empresa_ligada': 'Não',
'quantidade_vendas': '',
'detalhes': "{'Tipo de Ativo:': ['Fundo de Investimento e de Cotas'], 'Fundo:': ['BTG PACTUAL YIELD DI FUNDO DE INVESTIMENTO REFERENCIADO CRÉDITO PRIVADO'], 'Tipo de Aplicação:': ['Cotas de Fundos'], 'CNPJ:': ['00.840.011/0001-80']}",
'categoria': '',
'valor_vendas': '',
'perc_carteira': '0,235',
'quantidade_compras': '',
'posicao_final': '20.315,84',
'classificacao': '',
'valor_custos ': '',
'link': 'CDADetAplic.aspx?PkCDAAplic=7234076',
'valor_compras': '2.059'},
{'empresa_ligada': '',
'quantidade_vendas': '',
'detalhes': "{'Tipo de Ativo:': ['Outros'], 'Descrição:': ['VALORES A RECEBER'], 'Tipo de Aplicação:': ['Valores a receber']}",
'categoria': ' VALORES A RECEBER',
'valor_vendas': '',
'perc_carteira': '0,006',
'quantidade_compras': '',
'posicao_final': '490,91',
'classificacao': 'Paranegociação',
'valor_custos ': '',
'link': 'CDADetAplic.aspx?PkCDAAplic=7234078',
'valor_compras': ''}],
'nome_fundo': 'FUNDO DE INVESTIMENTO MULTIMERCADO CRÃ\x89DITO PRIVADO BOA ESPERANÃ\x87A - INVESTIMENTO NO EXTERIOR',
'data_carteira': '10/2007',
'_id': ObjectId('573d22f7a5c5da185c67fbd7')}如何获得"Tipo:“的”不同“值?
db.distinct("posicao.detalhes.Tipo de Ativo:")不管用。
有什么想法吗?
发布于 2016-05-19 05:17:53
首先,你的记录有问题。'detalhes'的值不是BSON,它们是字符串(JSON),但是这使得查询更加困难。
所以你得去查一查并更新你的记录。在Python中,您可以使用以下方法实现:
import json
updated_value = json.loads(value_of_detalhes)
db.update( ... {"$set": {"detalhes": updated_value}})修改JSON格式的字符串之后,可以使用聚合框架查找不同的值。下面是一个示例:
> db.foo.find()
{ "_id" : ObjectId("573...94"), "p" : [ { "d" : { "tda" : [ "y" ] } } ] }
{ "_id" : ObjectId("573...95"), "p" : [ { "d" : { "tda" : [ "x" ] } } ] } 请注意我的虚拟记录的结构与您的记录是如何相似的。它们的不同之处在于,d的值是BSON。永远不要将较少的d与detalhes并行。一旦将JSON修改为BSON,就可以这样做:
> db.foo.aggregate([{$group: {_id: "$p.d.tda"}}])
{ "_id" : [ [ "x" ] ] }
{ "_id" : [ [ "y" ] ] }因此,您会发现嵌入式字段tda有两个不同的值。
我的代码片段在JS中(使用mongo ),但是Python的原理仍然不变。
https://stackoverflow.com/questions/37313814
复制相似问题