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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top