Sto usando Python's mongoengine per interrogare MongoDB e l'ho adorato per la maggior parte, ma sto riscontrando un problema con uno advanced query.MongoDB che utilizza una clausola OR nella mongoengine
Ecco il mio modello
class ContentItem(Document):
account = ReferenceField(Account)
creator = ReferenceField(User)
public = BooleanField(default=False)
last_used = DateTimeField(default=datetime.now)
vorrei fare una query per tutti ContentItem
's che sono di un determinato account, e sono sia creato da l'utente connesso o sono pubblici. Ecco la domanda che ho scritto
query = ContentItem.objects.filter((Q(account=account) & Q(public=True)) | (Q(account=account) & Q(creator=logged_in_user))).order_by('-last_used')
o:
query = ContentItem.objects.filter(Q(account=account) & (Q(public=True) | Q(creator=logged_in_user))).order_by('-last_used')
Ma questi sembrano essere XOR in cui se uno public
, oppure il creator
ma non entrambi. È previsto?
Sto trascurando qualcosa? Dovrei farlo direttamente con mongodb invece di mongoengine?
La mia soluzione attuale consiste nel creare due query diverse e combinare i risultati, ma man mano che il numero di elementi del contenuto aumenta, il risultato richiede molto tempo per tornare perché è necessario ottenere tutti gli elementi prima di poterli ordinare, perdendo così tutti i benefici di (django) risultati paginati.
che ha fatto il trucco. ho aggiunto una nota sull'account github per correggere la documentazione https://github.com/hmarr/mongoengine/issues/363 – MattoTodd
Questo NON è il caso; vedere il problema github di cui sopra. Ho provato questo, ma usando 'o' invece di' | 'non applicherà il filtro. Usare '&' e '|' funziona bene per me. – Paul
@Paul - forse non hai notato che questo post aveva 9 mesi e che il bug è stato corretto? – apiguy