推荐使用[python升降机]进行查询的嵌套数据结构

推荐使用[python升降机]进行查询的嵌套数据结构,python,nosql,Python,Nosql,我正在收集一组文本文档,并构建一个json对象,以便使用python升降机进行查询。我目前有如下数据 [ [ {name:dad}, {name:son, dob:2/24/2000} ], [ {name:forever_alone, cats:12} ] ] 基于dob键的存在,我想做两个不同的查询:1)获取儿子,2)获取包含儿子(父亲和儿子)的家庭。据我所知,在Street中,字典列表并没有得到很好的支持

我正在收集一组文本文档,并构建一个json对象,以便使用python升降机进行查询。我目前有如下数据

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

    [
        {name:forever_alone, cats:12}
    ]

]
基于
dob
键的存在,我想做两个不同的查询:1)获取儿子,2)获取包含儿子(父亲和儿子)的家庭。据我所知,在Street中,字典列表并没有得到很好的支持。暂且不讨论这个问题,即升降机还不允许对并非每个记录上的字段进行查询,对于升降机来说,什么更好,什么更好的结构

字典的列表

[
    {
        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}
    ]

}
还是一本字典列表的字典

[
    {
        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)包含子的族的两个查询是什么?

[免责声明:这里是升降机维护器]

目前,升降机不支持此类请求,因为升降机将尝试查找每个对象上的查询字段,如果字段不存在,将引发错误

目前对这一问题的支持也不好

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

更好的数据结构是:

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,但尚未实现。

dad
son
之间是否存在某种类型的关系,这就是为什么它们被分组在同一个数组中的原因?是的,它们是同一家族的成员。数据来自于对一堆文本文件(实际上是asana.com任务)的解析,它们位于同一个文件中。