python mongoengine映射到现有集合

时间:2014-06-09 18:43:57

标签: python mongodb mongoengine

我对mongo引擎非常陌生,并且在理解它的功能方面有点麻烦 - 提供的文档并不是那么简单。我已经在Mongo收集了每个文档都有某些字段的地方。我将这些字段映射到从文档类派生的字段中,并根据别名将引用的集合映射到。

class imported_item(me.Document):
    _id = me.ObjectIdField(required = True)
    _type = me.StringField(max_length=10)
    _name = me.StringField(max_length=10)

def item_print(self):
    print ("************************************************")
    print self._id
    print self._type
    print self._name

    me.meta = {
        'db_alias': 'test',
        'index_background': True,
        'indexes': [(_type, 1),(_name, 1)],
        }

  def main():
     me.register_connection(alias="test", name=_database, host=_host, port=_port, username=_username, password=_password)

     print imported_item.objects({imported_item._type:'sm_tags'})
     imported_item.item_print()

现在我遇到的麻烦是: 1)Mongoengine抱怨它需要默认连接,而不是我所谓的测试,这不是我想要的,因为我将有几个集合,我想有几个对象类型链接到每个集合,所以我可以使用他们并行 2)我有一堆mongoengine.fields.StringField的对象在print中出现,但没有值 3)如果我试图用imported_item.objects.all()获取所有对象,那么它将返回一个空集。

我使用_mysql驱动程序,它更基于程序,因此我不了解DB和mongoengine之间的链接发生在什么级别,以及我如何访问数据库中的值。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不确定您的示例代码是否正确缩进,但要查看这些内容。

1)您需要连接到数据库 - 您已经注册了一个但没有连接到它的数据库。您可以使用get_connection按别名来获取连接。

from mongoengine.connection import get_connection
get_connection(alias)

2)您的打印方法看起来很好。但是,它需要在类的实例上调用 - 它不是静态方法 - 尝试:

imported_item.objects({imported_item._type:'sm_tags'}).first().item_print()

3)如果它因为你没有正确设置元而返回空集 - 它应该是Document类的一个属性 - 而不是试图设置me.meta例如:

meta = {
    'db_alias': 'test',
    'index_background': True,
    'indexes': [(_type, 1),(_name, 1)],
    }

最后 - 请查看pep8的语法,并遵循python编码标准,这些标准已被社区广泛接受用于python。