1

我有一个 MySQL 数据库,其中有一个名为sources的表,我有两个名为srctypeurl的列,其中 srctype 是一个名称(例如:Hello),而 url 是一个 url(例如:http: //google.com

例如,在使用 SQLAlchemy 的 Python 中,我可以过滤 srctype 并获取 url 列表;

src = "hello"    
links = session.query(sources).filter_by(srctype=src).all()

很简单,现在我正在将这些数据迁移到 MongoDB,为此我正在使用pymongo

我有一个函数可以将 srctype 和 url 保存到 mongodb 的数据库中

    def insertSources(self, srctype, link):
        """ Insert rss sources so we can parse them """
        new = {srctype: link}
        self.__sources.insert(new)

和一个检索 srctype 的函数

 def getSources(self, type=None, single=True): # type == srctype
    if type:
        if single:
            return self.__sources.find_one()
        else:
            return iter(self.__sources.find({srctype:type}))
    else:
        if single:
            return self.__sources.find_one()
        else:
            return iter(self.__sources.find())

这里的问题是,由于没有名为 srctype 的列,也没有名为 url 的列,我该如何做与 SQLAlchemy/MySQL 示例相同的操作?

在 MySQL 中是;

SELECT * FROM sources WHERE srctype="hello"

我想知道在我拥有的检索功能中(也在插入功能中,因为我不确定我在那里所做的是否适合我想要的工作)。在insertSources函数中,我简单地将dict添加到 MongoDB,显然我将无法在 getSources 函数中获取 srctype,因为 MongoDB 中的 srctype 没有列。任何帮助都会很棒。

4

1 回答 1

2

您的问题是您在保存数据时没有正确设置名称。代替

def insertSources(self, srctype, link):
    """ Insert rss sources so we can parse them """
    new = {srctype: link}
    self.__sources.insert(new)

你应该做

def insertSources(self, srctype, link):
    """ Insert rss sources so we can parse them """
    new = {'srctype': srctype, 'link': link}
    self.__sources.insert(new)

同样在getSources(). 如果srctype通过了,find()应该find_one()会收到{'srctype': type}

于 2012-11-02T21:36:51.680 回答