2017-05-31 173 views
1

我想在mongodb中进行查询,我不知道从头开始有多少变量。 你得到一个包含变量(字符串)的数组,然后mongo应该通过$或operator返回,所以没有重复。从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查询中从头开始有多少表达式时,是否有类似的方法或其他方式来进行此查询?

+0

你想获取返回的字符串还是你必须执行实际的MongoDB查询? – errata

+0

我必须做一个MongoDB查询。我需要数据库的结果。 – NotUser9123

回答

1

不建立您的查询字符串形式,使用PyMongo方法来查询数据库,例如:

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

,或者您可以通过Python列表,并在查询中使用$in

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