Pregunta

Tengo una colección que es un registro de la acción entre dos usuarios. Tiene una src_id y una dest_id.

Soy un mirando a buscar todos los registros que son acciones entre ID1 y una lista de identificadores de -. "ID = [ID2, ID3, ID4]"

Los siguientes dos comandos funcionan correctamente:

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} } 
       )

Sin embargo, y aquí es donde yo no puedo entender lo que está mal, lo que sigue se niega a devolver ningún resultado en absoluto:

act_obs = self.db.action_log.find(
        {'$or': [
          {'dest_id': id1, 'src_id': {'$in': ids} },
          {'src_id': id1, 'dest_id': {'$in': ids} }
        ]}
       )

Puede alguien arrojar alguna luz sobre lo que estoy haciendo mal, si ese es el caso? Y lo más importante, la forma de lograr lo que estoy tratando de hacer dentro de mongo.

Estoy tratando de obtener todos los registros en los que ID1 es el src_id y cualquiera de los identificadores en la lista de IDs es la dest_id o cualquier registros en los que id1 es la dest_id y cualquiera de los identificadores en la lista de IDs es la src_id.

Estoy usando pymongo 1.7. Gracias!

¿Fue útil?

Solución

El $ u operador está disponible en MongoDB 1.5.3 y posteriores.

Una alternativa es utilizar una función de JavaScript, algo así como ...

find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))

Otros consejos

No creo que se puede utilizar $or así. Tendrá que realizar la unión del lado del cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top