如何从python pymongo,MongoDB中找到特定的键:值2

时间:2013-05-24 07:40:41

标签: python mongodb find pymongo

我的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”字母。不久,我希望立即将所有文档中的所有单词作为列表或元组。谢谢。

1 个答案:

答案 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', ... ]

希望有所帮助。