gpt4 book ai didi

django - EmbeddedDocument ListField 中的 mongoengine 搜索

转载 作者:可可西里 更新时间:2023-11-01 09:15:24 24 4
gpt4 key购买 nike

我使用 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,required=True,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) 的一些 Gifted 商品的用户,我如何在不使用 for inside for、inside for... 等的情况下进行过滤/搜索

类似于:

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]

然后您使用它在您的用户集合中进行搜索:

listUsers = User.objects(profile__listGifts__shop=shop)

用于在列表中搜索的 MongoEngine 语法很简单:您只需将查询写成 listGifts 即可。不是一个列表,它将查询列表 listGifts 的所有用户包含给定的商店。

MongoEngine 不做的是加入。我的意思是您不能对多个集合进行单个查询。上面的第一个查询属于 Shop类集合。第二个到User类(class)合集- UserProfileGifted是同一集合中的嵌入文档。

关于django - EmbeddedDocument ListField 中的 mongoengine 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23088538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com