繁体   English   中英

使用结构化属性上的过滤器的NDB查询也会重复吗?

[英]NDB query using filters on Structured property which is also repeated ?

我正在创建一个示例应用程序,用于存储用户详细信息及其类信息。

使用的模态类为:

用于保存用户类别数据的模型类别

class MyData(ndb.Model):
    subject =  ndb.StringProperty()
    teacher = ndb.StringProperty()
    strength = ndb.IntegerProperty()
    date = ndb.DateTimeProperty()

用户模型类

class MyUser(ndb.Model):
    user_name = ndb.StringProperty()
    email_id = ndb.StringProperty()
    my_data = ndb.StructuredProperty(MyData, repeated = True)

我能够将数据成功存储到数据存储中,还可以使用一些基于email_id和user_name的过滤器对MyUser实体进行简单查询。

但是,当我尝试使用过滤器查询MyUser模态的结构化属性my_data的属性上的MyUser结果时,它没有给出正确的结果。

我想我查询不正确。 这是我的查询功能

函数根据重复的结构属性进行查询

def queryMyUserWithStructuredPropertyFilter():
    shail_users_query = MyUser.query(ndb.AND(MyUser.email_id == "napolean@gmail.com", MyUser.my_data.strength > 30))
    shail_users_list = shail_users_query.fetch(10)

    maindatalist=[]

    for each_user in shail_users_list:
        logging.info('NEW QUERY :: The user details are : %s %s'% (each_user.user_name, each_user.email_id))

    # Class data
        myData = each_user.my_data
        for each_my_data in myData:
            templist = [each_my_data.strength, str(each_my_data.date)]
            maindatalist.append(templist)

            logging.info('NEW QUERY :: The class data is : %s %s %s %s'% (each_my_data.subject, each_my_data.teacher, str(each_my_data.strength),str(each_my_data.date)))

    return maindatalist

我想获取具有重复结构化属性(my_data)的实体应该是强度> 30的列表。

请帮助我了解我在哪里做错了。

谢谢。

结构化属性的查询将返回至少一个结构化对象之一满足条件的对象。 如果要过滤这些属性,则必须随后进行。

这样的事情应该可以解决问题:

def queryMyUserWithStructuredPropertyFilter():
    shail_users_query = MyUser.query(MyUser.email_id == "napolean@gmail.com", MyUser.my_data.strength > 30)
    shail_users_list = shail_users_query.fetch(10)

    # Here, shail_users_list has at most 10 users with email being
    # 'napolean@gmail.com' and at least one element in my_data
    # with strength > 30

    maindatalist = [
        [[data.strength, str(data.date)] for data in user.my_data if data.strength > 30] for user in shail_users_list
    ]

    # Now in maindatalist you have ONLY those my_data with strength > 30
    return maindatalist

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM