Pergunta

Eu tenho uma coleção que é um registro de ação entre dois usuários. Possui um src_id e um dest_id.

Estou procurando buscar todos os registros que são ações entre ID1 e uma lista de IDs - "IDS = [ID2, ID3, ID4].

As duas declarações a seguir funcionam corretamente:

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

No entanto, e é aqui que eu não consigo descobrir o que está errado, o seguinte se recusa a retornar quaisquer resultados:

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

Alguém pode esclarecer o que estou fazendo de errado, se for esse o caso? E mais importante, como realizar o que estou tentando fazer em Mongo.

Estou tentando obter todos os registros em que o ID1 é o src_id e qualquer um dos IDs na lista IDS é o dest_id ou qualquer registro em que o ID1 seja o dest_id e qualquer um dos IDs na lista IDS é o SRC_ID.

Estou usando o Pymongo 1.7. Obrigada!

Foi útil?

Solução

O $ ou operador está disponível no MongoDB 1.5.3 e posterior.

Uma alternativa é usar uma função JavaScript, algo como ...

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

Outras dicas

Eu não acho que você possa usar $or Curtiu isso. Você terá que executar o lado do cliente da União.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top