【问题标题】:pymongo query not returning resultspymongo查询不返回结果
【发布时间】:2019-09-18 10:57:00
【问题描述】:

我的查询有问题,我正在尝试对多个字段使用 find contains 查询,这是我的代码。我将不胜感激。

def loadContact(search):
    myQuery = {'username' : {'$ne' : session['username']},\
               '$and' : [{'$or' : [\
                     {'username' : '/.*' + search + '.*/i'},\
                     {'surname' : '/.*' + search + '.*/i'},\
                     {'firstName' : '/.*' + search + '.*/i'},\
                     {'email' : '/.*' + search + '.*/i'},\
                     {'company' : '/.*' + search + '.*/i'}]}]}
    cursor = db.users.find(myQuery)
    payload = []
    content = {}
    for doc in cursor:
        #this is mocked up code for this question so you can see more clearly
        content = {'username' : cursor[0], 'firstName' : cursor[1]}
        payload.append(content)

    return payload

值得注意的是循环不会迭代,如果不迭代,循环的内容现在并不重要。

因为我需要任何字符串值的具体值,这里是任何字符串的具体值:

session['username'] = "username" 
loadContact(): loadContact("string")

【问题讨论】:

  • 你的代码真的是这样缩进的吗?
  • 是的,我刚刚缩短了循环内容,但所有字段都会这样
  • 要获得帮助,您需要包括以下内容:1) 传递给函数的 search 的值 2) 当您认为会返回时未返回的文档示例。 3)session['username']的值
  • 搜索是一串文本,如“person”或“matt”,用户名是“mfarrell1”或任何类型的用户名
  • 不,我的意思是一个具体的例子,我们可以重现。

标签: python mongodb pymongo


【解决方案1】:

带有斜杠的字符串不会被解释为像您在这里所期望的那样分隔正则表达式。您需要使用 $regex 运算符或使用 Python 正则表达式对象。您也不需要在这里使用$and,因为所有术语都是隐含的“与”。

myQuery = {'username' : {'$ne' : session['username']},
           '$or' : [
                 {'username' : {'$regex' : search, '$options': 'i'}},
                 {'surname' : {'$regex' : search, '$options': 'i'}},
                 {'firstName' : {'$regex' : search, '$options': 'i'}},
                 {'email' : {'$regex' : search, '$options': 'i'}},
                 {'company' : {'$regex' : search, '$options': 'i'}}]}

【讨论】:

  • 我明天试试,谢谢你的直接回答,而不是问毫无意义的信息。
  • 它有效,问题是我忘了我已经清除了数据库,所以我正在寻找的几个名字已经不在里面了。
猜你喜欢
  • 1970-01-01
  • 2016-11-18
  • 2021-12-06
  • 1970-01-01
  • 2021-07-31
  • 2012-05-08
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多