1

2人のユーザー間のアクションログであるコレクションがあります。src_idとdest_idがあります。

id1とidのリストの間のアクションであるすべてのレコードをフェッチしようとしています-"ids=[id2、id3、id4]"。

次の2つのステートメントは正しく機能します。

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

しかし、これは私が何が悪いのか理解できないところです、以下は結果を返すことをまったく拒否します:

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

もしそうなら、誰かが私が間違っていることに光を当てることができますか?そしてもっと重要なのは、mongo内で私がやろうとしていることをどのように達成するかです。

id1がsrc_idでidsリストのidsがdest_idであるすべてのレコード、またはid1がdest_idでidsリストのidsがsrc_idであるすべてのレコードを取得しようとしています。

pymongo1.7を使用しています。ありがとうございました!

4

2 に答える 2

0

そんな風に使えないと思います$or。ユニオンクライアント側を実行する必要があります。

于 2010-08-08T23:05:39.220 に答える
0

$ or演算子は、MongoDB1.5.3以降で使用できます。

別の方法は、次のようなJavascript関数を使用することです...

find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))
于 2010-08-17T21:43:17.073 に答える