Question

J'ai une collection qui est un journal d'action entre deux utilisateurs. Il a une src_id et un DEST_ID.

Je suis à la recherche d'aller chercher tous les documents qui sont des actions entre ID1 et une liste des ids -. "Ids = [ID2, ID3, ID4]"

Les deux énoncés suivants fonctionnent correctement:

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

Cependant, ce qui est là, je ne peux pas comprendre ce qui est faux, ce qui suit refuse de revenir à tous les résultats:

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

Quelqu'un peut-il faire la lumière sur ce que je fais mal, si tel est le cas? Et plus important encore, la façon d'accomplir ce que je suis en train de faire dans mongo.

Je suis en train d'obtenir tous les dossiers où ID1 est le src_id et l'un des ids dans la liste des ids est le DEST_ID OU tous les enregistrements où ID1 est le DEST_ID et l'un des ids dans la liste des ids est le src_id.

J'utilise pymongo 1.7. Merci!

Était-ce utile?

La solution

Le $ ou l'exploitant est disponible dans MongoDB 1.5.3 et versions ultérieures.

Une alternative est d'utiliser une fonction Javascript, quelque chose comme ...

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

Autres conseils

Je ne pense pas que vous pouvez utiliser $or comme ça. Vous devrez effectuer le côté client union.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top