Frage

ich eine Sammlung haben, die ein Aktionsprotokoll zwischen zwei Benutzern ist. Es hat eine src_id und DEST_ID.

Ich bin eine Suche alle Datensätze zu holen, die Aktionen zwischen id1 und einer Liste von IDs -. "Ids = [ID2, ID3, ID4]"

Die beiden folgenden Anweisungen richtig funktionieren:

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

Allerdings, und das ist, wo ich kann nicht herausfinden, was falsch ist, wird die folgende weigert sich überhaupt keine Ergebnisse zurück:

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

Kann jemand etwas Licht auf, was ich falsch mache, wenn das der Fall ist? Und was noch wichtiger ist, wie zu tun, was ich versuche in Mongo zu tun.

Ich versuche, alle Datensätze zu erhalten, wo id1 die src_id ist und eine der IDs in der ids Liste ist die DEST_ID oder jegliche Datensätze, bei denen id1 die DEST_ID ist und eine der IDs in der ids Liste ist die src_id.

Ich bin mit pymongo 1.7. Vielen Dank!

War es hilfreich?

Lösung

Die $ oder Betreiber ist in MongoDB 1.5.3 und höher verfügbar.

Eine Alternative ist eine Javascript-Funktion zu verwenden, so etwas wie ...

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

Andere Tipps

Ich glaube nicht, dass Sie $or so verwenden können. Sie werden die Union Client-Seite durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top