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

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

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函数中,我简单地将字典添加到MongoDB中,显然,我将无法在getSources函数中获取srctype,因为MongoDB中的srctype没有列。
任何帮助都会很棒。

最佳答案

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

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}

10-08 12:50