django – mongoengine在EmbeddedDocument ListField中搜索

django – mongoengine在EmbeddedDocument ListField中搜索,第1张

概述我使用 django-mongonengine来使用mongdb数据库;我有一个关于在这样的结构中过滤/搜索的问题: class Shop(Document):created = DateTimeField(default=datetime.now,verbose_name='date_created')updated = DateTimeField(default=datetime.now, 我使用 django-mongonengine来使用mongdb数据库;我有一个关于在这样的结构中过滤/搜索的问题:

class Shop(document):created = DateTimeFIEld(default=datetime.Now,verbose_name='date_created')updated = DateTimeFIEld(default=datetime.Now,verbose_name='date_updated')code = StringFIEld(required=True,unique=True)socialname = StringFIEld(verbose_name='legal_name')name = StringFIEld(required=True,verbose_name='shop_name')address = StringFIEld(required=True,verbose_name='shop_address')gpsLoc = GeoPointFIEld()apdo = IntFIEld(default=0)logo = StringFIEld(verbose_name='url_logo')ListGifts = ListFIEld(EmbeddeddocumentFIEld(Gift))listoffers = ListFIEld(EmbeddeddocumentFIEld(Offer))def __unicode__(self):    return u'%s' % (self.name)@queryset_managerdef objects(doc_cls,queryset):    return queryset.order_by('-shop_name')class Gifted(Embeddeddocument):    created = DateTimeFIEld(default=datetime.Now,verbose_name='date_created')    gifted = DateTimeFIEld(default=datetime.Now,verbose_name='date_gifted')    shop = ReferenceFIEld(Shop,required=True,verbose_name='shop')    gift = EmbeddeddocumentFIEld(Gift,verbose_name='gift')    def __unicode__(self):        return u'%s' % (self.gift)    @queryset_manager    def objects(doc_cls,queryset):        return queryset.order_by('-date_gifted')class UserProfile(Embeddeddocument):    created = DateTimeFIEld(default=datetime.Now,verbose_name='date_created')    updated = DateTimeFIEld(default=datetime.Now,verbose_name='date_updated')    birthday = DateTimeFIEld(verbose_name='birthday')    gender = BooleanFIEld(default=True,verbose_name='is_man')    rel_status = StringFIEld()    name = StringFIEld(max_length=50,verbose_name='name')    phone = StringFIEld(verbose_name='phone')    points = IntFIEld(default=0,verbose_name='current_points')    ListGifts = ListFIEld(EmbeddeddocumentFIEld(Gifted))    listoffers = ListFIEld(EmbeddeddocumentFIEld(discount))    def __unicode__(self):      return self.name    @queryset_manager    def objects(doc_cls,queryset):        return queryset.order_by('update')class User(document):    username = EmailFIEld(unique=True,max_length=250,min_length=4,required=True)    password = StringFIEld(max_length=100,required=True)    created = DateTimeFIEld(default=datetime.Now,verbose_name='date_created')    code = StringFIEld(required=True,unique=True)    tok_crypt = StringFIEld(verbose_name='token_crypt',required=True)    expired = DateTimeFIEld(verbose_name='date_expired')    last_login = DateTimeFIEld(default=datetime.Now,verbose_name='date_last_login')    profile = EmbeddeddocumentFIEld(UserProfile,verbose_name='profile')    def __unicode__(self):  return self.username    @queryset_manager    def objects(doc_cls,queryset):        return queryset.order_by('username')

如果我想从特定商店(Shop.code)搜索所有具有一些天赋物品的用户,我如何过滤/搜索而不使用内部,内部…等.

就像是:

ListUsers = User.objects(profile.ListGifts__contains=Gifted.objects(shop.code=sCode))

ListUsers = User-> Profile-> List(Gifted-> Shop.code = code)

解决方法 首先,您必须获得具有给定代码的商店:

shop = Shop.objects(code=code)[0]

然后使用它在User集合中搜索:

ListUsers = User.objects(profile__ListGifts__shop=shop)

用于在列表中搜索的MongoEngine语法很简单:您只需编写查询,就像ListGifts不是列表一样,它将查询列表ListGifts包含给定商店的所有用户.

MongoEngine不做的是加入.我的意思是你不能对一个以上的集合进行单一查询.上面的第一个查询属于Shop类集合. User类的第二个集合 – UserProfile和Gifted是同一集合中的嵌入式文档.

总结

以上是内存溢出为你收集整理的django – mongoengine在EmbeddedDocument ListField中搜索全部内容,希望文章能够帮你解决django – mongoengine在EmbeddedDocument ListField中搜索所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1197064.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存