2017-06-15 7 views
0

私は配列内でmongodbをクエリしています。私は彼らが私のために単一の配列を照会するために働く例を得ました。しかし、私は2つの異なる配列を持っていて、それらを1つのクエリに組み合わせたいと思ったら、これはどのように機能しますか?たとえば、item1とitem2は2つの異なる配列でした。2つの異なる配列のmongodbクエリ

# example given in mongodb document 
db.inventory.find({ qty: { $in: [ 5, 15 ] } }) 

# example of query of what I am trying achieve query two arrays 
db.inventory.find({ item1: { $in: [ item1_value ] } { item2: { $in: [ item2_value ] } }) 

のMongoDB参照ドキュメント:https://docs.mongodb.com/manual/reference/operator/query/in/

私も、私は、コマンドがどのように見えるかのアイデアを得るためにMongoDBを使用していますが、このコマンドは次のようになりますよう、最終的に、このコマンドはpymongoのために働く必要があることを言及する必要がありますpymongo経由で実行されます。

# correct query example as given by Moshe 
db.inventory.find({ 
     $or: [ 
      { item1: { $in: [ item1_value ] }}, 
      { item2: { $in: [ item2_value ] }} 
     ] 
}); 
+0

あなたはあなたの 'itemX_value'が実際にのみ、単一の値ではなく、あなたが自分自身をするアレイ場合に注意すべきです配列であるドキュメントプロパティを検索するだけで '$ in'は必要ありません。だから、 '$ in'への引数が「リスト」でなければならないとしたら、あなただけです。 '.find({'$ or':[{'item1:1}、{' item2 ':2}]})'となります。 "引数リスト"の場合は '$ in'です.find({'$ or':{{'item1':{'$ in':[1,2]}、{'item2':{'$ in' :[1,2]}}}}) '。 MongoDBは '' item1''が実際に配列そのものであるかどうか気にしません。なぜなら、単純に "特異な"供給された値のメンバーを検索するからです。そして、はい、Pythonの構文は同じです –

+0

その説明をありがとう。私はそれを念頭に置いておきます。 – Matt

答えて

1

MongoDBの "OR" SYNTAX:あなたのケースでは

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

db.inventory.find({ 
     $or: [ 
      { item1: { $in: [ item1_value ] }, 
      { item2: { $in: [ item2_value ] } 
     ] 
}); 
+0

私は正しいと思いますが、これをクエリとして実行すると、構文が完全にコマンドを終了していないかのようになります。 – Matt

+0

@Matt私は文法が間違っていました、 '' 'と'} 'を混ぜて、今すぐ動作するはずです。 – Moshe

+0

ええ、これはmongodbで私を殺しているものです。構文は少し痛いです。私はこれも同様の問題であるように見えた。 {item1:{$ in:[item1_value]}は、一番外側の括弧が$ inの前の括弧にマッチしただけなので、括弧が欠けていたと思います。私はそれを閉じて、まだ問題を見ている。 – Matt

関連する問題