2017-05-31 12 views
1

mongodbでクエリを作成しようとしていますが、最初からいくつの変数があるか分かりません。 変数(文字列)を持つ配列を取得した後、mongoは$または演算子を介して戻り、重複がないようにします。mongodb、python3の文字列からクエリを作成

def findRecipes(IngredientsHome): 
#Query and return all the alternatives 

arrayCompleteSearch = []; 
if len(IngredientsHome) > 1: 
    #theHardStuuff 
    #Create the query based on ingredientsarray 
    argsCount = len(IngredientsHome) 
    argsFunction = ""; 
    for i in range(0, len(IngredientsHome)): 
     if i < (len(IngredientsHome)-1): 
      argsFunction += ("{"+'"_Ingredients":' + '"' + IngredientsHome[i] + '"' "}, ") 
     else: 
      argsFunction += "{" + '"_Ingredients":' + '"' + IngredientsHome[i] + '"' + "}" 

私は、この

print("coll.find({" + '$or' + ':' + '[' + argsFunction + ']' "})") 

のようなコマンドラインが(実行しない)私はMongoDBの中でやりたいが、私はそれがモンゴで動作させる方法がわからないコマンドを印刷しますない場合と結果を配列に返します。私はpymongoを使用していますが、完全なクエリとして文字列を使用することができない場合はありません。 SQLでは、私は全体の "クエリ"を文字列として"SELECT * FROM ..."を置くことができますが、pymongoが必要です:文字列の外側には、より多くのようにcoll.find({"String":"String"})があります。私のmongodbクエリーの最初からいくつの式があるかわからないときに、このような方法や別の方法でこのクエリを作成する方法はありますか?

coll.find({'_Ingredients': IngredientsHome[i]}) 

か、Pythonのリストを渡し、クエリで$inを使用することができます:代わりに文字列としてクエリを構築する

+0

返された文字列を取得しようとしているのですか、実際のMongoDBクエリを実行する必要がありますか? – errata

+0

MongoDBクエリを実行する必要があります。私はデータベースからの結果が必要です。 – NotUser9123

答えて

1

、例えば、データベースを照会するPyMongoメソッドを使用

coll.find({'_Ingredients': {'$in': IngredientsHome}}) 

Read more about how to use PyMongo here.

+0

はい、問題は、私が最初から持っているパラメータの数がわからないことです。私はIngredientsHome [1]、IngredientsHome [2]、IngredientsHome [3]、または2つのIngredientsHomeについて質問する必要があるかどうかわかりません。私がループして新しいクエリを毎回作成する場合、私は複数の重複で終わるでしょう。 1レシピには複数の成分が含まれているので、同じレシピが複数回表示されます。 – NotUser9123

+0

@ NotUser9123私の答えを更新しました! – errata

+0

ありがとうございます!私はあなたが私の問題を解決したと思う! – NotUser9123

関連する問題