MongoDB unione $ o problemi
Domanda
Ho una collezione che è un registro di azione tra due utenti. Ha uno src_id e DEST_ID.
Sono un cercando di recuperare tutti i record che sono azioni tra ID1 e un elenco di ID -. "Id = [id2, ID3, ID4]"
Le due istruzioni seguenti funzionano correttamente:
act_obs = self.db.action_log.find(
{'src_id': id1, 'dest_id': {'$in': ids} }
)
act_obs = self.db.action_log.find(
{'dest_id': id1, 'src_id': {'$in': ids} }
)
Tuttavia, e questo è dove io non riesco a capire cosa è sbagliato, la seguente si rifiuta di prodotto risultati a tutti:
act_obs = self.db.action_log.find(
{'$or': [
{'dest_id': id1, 'src_id': {'$in': ids} },
{'src_id': id1, 'dest_id': {'$in': ids} }
]}
)
Qualcuno può fare luce su quello che sto facendo di sbagliato, se questo è il caso? E ancora più importante, come realizzare quello che sto cercando di fare all'interno di Mongo.
Sto cercando di ottenere tutti i record in cui id1 è lo src_id e qualsiasi degli ID nella lista IDS è il DEST_ID o qualsiasi record in cui id1 è il DEST_ID e qualsiasi degli ID nella lista IDS è lo src_id.
sto usando pymongo 1.7. Grazie!
Soluzione
Il $ o l'operatore è disponibile in MongoDB 1.5.3 e versioni successive.
Un'alternativa è quella di utilizzare una funzione JavaScript, qualcosa di simile ...
find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))
Altri suggerimenti
Non credo che è possibile utilizzare $or
così. Si dovrà eseguire l'unione lato client.