我的mongo db示例是:
MONGO
> db.pages.findOne()
{
"_id" : ObjectId("519b6e81661b820d0e5d4f83"),
"papers" : {
"text" : "RT @sydest: Sütaş reklamlarındaki inekleri erkekler seslendirdiği sürece bu cinsiyet ayrımcılığı bitmez...",
"ID" : null,
"paragraphs" : [
{
"text" : "RT @sydest: Sütaş reklamlarındaki inekleri erkekler seslendirdiği sürece bu cinsiyet ayrımcılığı bitmez...",
"ID" : "0P107",
"sentences" : [
{
"text" : "RT @sydest: Sütaş reklamlarındaki inekleri erkekler seslendirdiği sürece bu cinsiyet ayrımcılığı bitmez...",
"ID" : "0S107",
"words" : [
{
"text" : "RT",
"ID" : "1W3"
},
{
"text" : "sydest",
"ID" : "5W11"
},
{
"text" : "Sütaş",
"ID" : "13W18"
},
{
"text" : "reklamlarındaki",
"ID" : "19W34"
},
{
"text" : "inekleri",
"ID" : "35W43"
},
{
"text" : "erkekler",
"ID" : "44W52"
},
{
"text" : "seslendirdiği",
"ID" : "53W66"
},
{
"text" : "sürece",
"ID" : "67W73"
},
{
"text" : "bu",
"ID" : "74W76"
},
{
"text" : "cinsiyet",
"ID" : "77W85"
},
{
"text" : "ayrımcılığı",
"ID" : "86W97"
},
{
"text" : "bitmez",
"ID" : "98W104"
}
]
}
]
}
]
}
}
在这个样本中,我有一篇论文。在论文中我有段落键和值句列表。同样我在单词元素中有单词键和值单词列表。
我只想获得所有“文字”,其中“ID”带有“W”字母。不久,我希望立即将所有文档中的所有单词作为列表或元组。谢谢。
答案 0 :(得分:2)
我很确定有一种更美妙的方式来实现你想要的东西,但这就是我使用find()
来实现的目标。
MongoDB查询:
db.so.find({'papers.paragraphs': {$elemMatch: {'sentences': {$elemMatch: {'words': {$elemMatch: {'ID': {$regex: 'W'}}}}}}}}, {'papers.paragraphs.sentences.words.text': 1}).pretty();
python代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymongo
mongo_db = pymongo.MongoClient().test
cursor = mongo_db.so.find({'papers.paragraphs':
{'$elemMatch':
{'sentences':
{'$elemMatch':
{'words':
{'$elemMatch':
{'ID': {'$regex': 'W'}}}}}}}},
{'papers.paragraphs.sentences.words.text': 1})
results = []
for result in cursor:
for paragraph in result['papers']['paragraphs']:
for sentence in paragraph['sentences']:
for word in sentence['words']:
results.append(word['text'])
print results # prints [u'RT', u'sydest', ... ]
希望有所帮助。