2

我在这里看到很多措辞相似的问题,但没有一个能解决我的问题。

我有这样的文件:

{'_id': ObjectId('5006916af9cf0e7126000000'),'data': [{'count': 0,'alis':'statsministeren','avis':'Ekstrabladet'}, {'count': 0,'alis ':'thorning','avis':'Ekstrabladet'}, {'count': 0,'alis':'socialdemokratiets formand','avis':'Ekstrabladet'}, {'count': 0,'alis' :'lars barfod','avis':'Ekstrabladet'}, {'count': 0,'alis':'formand for det konservativefolkeparti','avis':'Ekstrabladet'}, {'count': 0, 'alis':'s\xf8vndal','avis':'Ekstrabladet'}, {'count': 0,'alis': u"sf's formand",'avis':'Ekstrabladet'}, {'count': 0,'阿里斯':'m\xf6ger','avis':'Ekstrabladet'}, {'count': 0,'alis':'lars l\xf8kke','avis':'Ekstrabladet'}, {'count': 0,'alis ':'l\xf8kke rasmussen','avis':'Ekstrabladet'}, {'count': 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'Ekstrabladet'}, {' count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'Ekstrabladet'}, {'count': 0,'alis':'statsministeren','avis':'Information'}, { 'count': 1,'alis':'thorning','avis':'信息'}, {'count': 0,'alis':'socialdemokratiets formand','avis':'信息'}, {'计数':0,'alis':'lars barfod','avis':'Information'}, {'count': 0,'alis':'formand for det konservative peopleeparti','avis':'Information'}, {'count': 0,'alis':'s\xf8vndal', 'avis':'Information'}, {'count': 0,'alis': u"sf's formand",'avis':'Information'}, {'count': 0,'alis':'m\xf6ger ','avis':'信息'}, {'count': 0,'alis':'lars l\xf8kke','avis':'信息'}, {'count': 0,'alis':' l\xf8kke rasmussen','avis':'Information'}, {'count': 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'Information'}, {'count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'信息'}, {'count': 0,'alis':'statsministeren','avis':'Berlingske'}, {'count': 0,'alis':'thorning','avis':'Berlingske' }, {'count': 0,'alis':'socialdemokratiets formand','avis':'Berlingske'}, {'count': 0,'alis':'lars barfod','avis':'Berlingske' }, {'count': 0,'alis':'formand for det konservative palmeparti','avis':'Berlingske'}, {'count': 1,'alis':'s\xf8vndal','avis' :'Berlingske'}, {'count': 0,'alis': u"sf's formand",'avis':'Berlingske'}, {'count': 0,'alis':'m\xf6ger',' avis':'Berlingske'}, {'count': 0,'alis':'lars l\xf8kke','avis':'Berlingske'}, {'count': 0,'alis':'l\xf8kke rasmussen','avis':'Berlingske'}, {'count' : 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'Berlingske'}, {'count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'Berlingske '}, {'count': 0,'alis':'statsministeren','avis':'JP'}, {'count': 0,'alis':'thorning','avis':'JP'} , {'count': 0,'alis':'socialdemokratiets formand','avis':'JP'}, {'count': 0,'alis':'lars barfod','avis':'JP'} , {'count': 0,'alis':'formand for det konservative peopleeparti','avis':'JP'}, {'count': 0,'alis':'s\xf8vndal','avis':'JP'}, {'count': 0,'alis': u"sf's formand",'avis ':'JP'}, {'count': 1,'alis':'m\xf6ger','avis':'JP'}, {'count': 0,'alis':'lars l\xf8kke' ,'avis':'JP'}, {'count': 0,'alis':'l\xf8kke rasmussen','avis':'JP'}, {'count': 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'JP'}, {'count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'JP'}, {'count': 0 ,'alis':'statsministeren','avis':'BT'}, {'count': 0,'alis':'thorning','avis':'BT'}, {'count': 0,'alis':'socialdemokratiets formand','avis':'BT'}, {'count': 0,'alis':'lars barfod','avis':'BT'}, {'count' : 0,'alis':'formand for det konservative palmeparti','avis':'BT'}, {'count': 0,'alis':'s\xf8vndal','avis':'BT'}, {'count': 0,'alis': u"sf's formand",'avis':'BT'}, {'count': 0,'alis':'m\xf6ger','avis':'BT' }, {'count': 0,'alis':'lars l\xf8kke','avis':'BT'}, {'count': 0,'alis':'l\xf8kke rasmussen','avis' :'BT'}, {'count': 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'BT'}, {'count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'BT'}, {'count': 0,'alis':'statsministeren','avis':'Politiken'}, { 'count': 0,'alis':'thorning','avis':'Politiken'}, {'count': 0,'alis':'socialdemokratiets formand','avis':'Politiken'}, {' count': 0,'alis':'lars barfod','avis':'Politiken'}, {'count': 0,'alis':'formand for det konservativefolkeparti','avis':'Politiken'} , {'count': 0,'alis':'s\xf8vndal','avis':'Politiken'}, {'count': 0,'alis': u"sf's formand",'avis':'Politiken '}, {'count': 0,'alis':'m\xf6ger','avis':'Politiken'}, {'count': 0,'alis':'lars l\xf8kke','avis':'Politiken'}, {'count': 0,'alis':'l\xf8kke rasmussen','avis':'Politiken'}, {'count': 0,'alis':'lederen af danmarks st\xf8rste parti','avis':'Politiken'}, {'count': 0,' alis':'Pia Kj\xe6rsgaard','avis':'Politiken'}],'time':'2012-07-18 12:35:22.241245'}count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'Politiken'}],'time':'2012-07-18 12:35:22.241245'}count': 0,'alis':'Pia Kj\xe6rsgaard','avis':'Politiken'}],'time':'2012-07-18 12:35:22.241245'}

IE:

{_objectId : xxx, time: yyy, data :[ 72 similar dicts in this array ]}

我想从 72 个字典之一中检索值。

我的第一次尝试是这样的:

db.observations.find({'data.avis':'Ekstrabladet', 'data.alis':'thorning'}, {'data.count':1})

这将检索 72 个count字典,而我真正想要的是同时满足avis:ekstrabladetalis:thorning(只有一个数组)的数组的计数值。但是 mongo 会返回整个文档。

我找到了 $elemMatch,但我得到了相同的输出。

db.observations.find({'data' : {$elemMatch: {'alis':'thorning','avis':'Ekstrabladet'}}},{'data.count':1})

我想我可以在 python 中迭代完整的文档(这是一个烧瓶应用程序),但它看起来不是很优雅。

所以我的问题是:如何进入文档内部并从嵌套的数组文档中获取值?

奖励:由于我是各种数据库的新手,我只选择了 mongodb,因为它看起来非常好用且灵活,而且我不使用关键数据。但我不需要可扩展性,可以使用例如 sqlite 代替。如果你对我使用错误的工作工具有强烈的意见 - 那么请辱骂我。

4

1 回答 1

2

您不能只返回选定的子文档。你会得到所有的。因此,您必须在客户端进行过滤。

$elemMatch但是,本质上是这样,否则您将不会将 avis 和 alis 与同一个数组条目匹配(每个匹配一个就足够了,AND vs OR 在某种程度上)。

于 2012-07-18T12:29:25.813 回答