python - 推荐使用 [python-lifter] 进行查询的嵌套数据结构

标签 python nosql

我正在抓取文本文档的集合并构建一个 json 对象以使用 python-lifter 进行查询。我目前有这样的数据

[
    [
        {name:dad},
        {name:son, dob:2/24/2000}
    ],

    [
        {name:forever_alone, cats:12}
    ]

]

我想根据 dob 键的存在执行两个不同的查询:1) 获取儿子,2) 获取包含儿子的家庭(爸爸和儿子)。据我了解,lifter 中并没有很好地支持字典列表列表。暂时搁置 lifter 还不允许查询不在每条记录上的字段的问题,什么会更好,对于 lifter 来说更好的结构是什么?

字典的字典列表?

[
    {
        0:{name:dad},
        1:{name:son, dob:2/24/2000}
    },

    {
        0:{name:forever_alone, cats:12}
    }

]

或者字典列表的字典?

{18283923:
    [
        {name:dad},
        {name:son, dob:2/24/2000}
    ],

 18283927:
    [
        {name:forever_alone, cats:12}
    ]

}

并且,给定理想的嵌套数据结构,将返回 1) 儿子和 2) 包含儿子的家庭的两个查询是什么?

最佳答案

[免责声明:此处为升降机维护者]

lifter 目前不支持此类请求,因为 lifter 会尝试在每个对象上查找查询字段,如果该字段不存在,则会引发错误。

支持querying against iterable fields目前也不好。

An issue不过,关于缺失字段的问题已经被打开, 但无论如何,您的数据结构并不真正适合此类查询。

更好的数据结构是:

families = [
    {
        'id': 1,
        'members': [
            {'name': 'dad'},
            {'name': 'son', 'dob':'2/24/2000'}
        ]
    },
    {
        'id': 2,
        'members': [
            {'name': 'forever_alone', 'cats': 12}
        ]
    }
]

然后,在解决了之前的链接问题后,您可以使用以下内容进行查询:

Family = lifter.models.Model('Family')
manager = Family.load(families)

# get families with son/dob members
son_dob_families = manager.filter(Family.members.name == 'son', Family.members.dob.exists())\
                          .values(Family.id, Family.members)

# keep only son members with dob

Member = lifter.models.Model('Member')
members = [member for family in son_dob_families for member in family['members']]
sons_with_dob = Member.load(members).filter(Member.name == 'son', Member.dob.exists())

虽然这是一个理论上的 API,但尚未实现。

关于python - 推荐使用 [python-lifter] 进行查询的嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633589/

相关文章:

hadoop - 为什么在HBase中使用OLAP的原因

python - 这是什么特殊的人物呢?

python - python解释器如何处理具有默认参数的函数定义的位置

python - 计算数组中的邻居值

python - 优化汉明距离 Python

python - 使用 pymongo 创建稀疏索引

database - 为配置选择合适的存储

java - Cassandra-cli 无法连接到远程 cassandra 服务器

c# - 使用 nosql 数据库替代 sql server

mysql - DB Complex 增量计数器