django – mongoengine在EmbeddedDocument ListField中搜索
发布时间:2020-12-20 13:41:55 所属栏目:Python 来源:网络整理
导读:我使用 django-mongonengine来使用mongdb数据库;我有一个关于在这样的结构中过滤/搜索的问题: class Shop(Document):created = DateTimeField(default=datetime.now,verbose_name='date_created')updated = DateTimeField(default=datetime.now,verbose_nam
我使用
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_manager def 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-> 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是同一集合中的嵌入式文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |