Python mongo中所有记录的下字段
基本上,我的帐户设置如下:Python mongo中所有记录的下字段,python,mongodb,Python,Mongodb,基本上,我的帐户设置如下: { 'email': 'Matt@GMAIL.com', 'others': '...' } 在sql中,我习惯于只搜索较低(email)=较低(search)的位置,但我发现在mongo中很难(而且很快)做到这一点 所以我试着做一些类似的事情: 更新帐户设置电子邮件=较低(电子邮件) 或: 你知道在Mongo怎么做吗 注:我使用的是PyMongo驱动程序我误解了你的问题。。 我只能使用python函数:) 我不理解你的问题。。 我只能使用python函数:)
{
'email': 'Matt@GMAIL.com',
'others': '...'
}
在sql中,我习惯于只搜索较低(email)=较低(search)的位置,但我发现在mongo中很难(而且很快)做到这一点
所以我试着做一些类似的事情:
更新帐户设置电子邮件=较低(电子邮件)代码>
或:
你知道在Mongo怎么做吗
注:我使用的是PyMongo驱动程序我误解了你的问题。。
我只能使用python函数:)
我不理解你的问题。。
我只能使用python函数:)
我为您制作了一个更简洁的代码。:)
要回答下面的评论。。。“以您的示例为例,用户名==”John“,如何将他的用户名和其他人的用户名转换为小写?”
您需要进行一个查询,其中包含您想要的所有用户的共同点(这是目前的基本编程)。您可以进行类似于{'username':{'exists':True}
或{'grade':'member'}
的查询。在这里,它将返回每个用户,或每个成员用户(因为这是一个仅包含用户的集合)
然后,使用**kwargs
,使用您希望更新的值进行更新。诚然,现在这个问题还没有得到回答,因为您需要将argfunc
添加到update\u query\u in\u table
中,使其像一个符咒一样工作,如下所示:
def update_query_in_table(table, query, action='$set',
multi=False, func=lambda x: x, **kwargs):
""" Updates user information using **kwargs.
Either updates using action='$set' or deletes using action='$unset'
"""
update = {action : {}}
for key, value in kwargs.iteritems():
# By default, func does nothing.
update[action][key] = func(value)
upd = table.update(query, update, multi=multi)
默认情况下,func不做任何事情,但是您可以使用update(…),func=lambda x:x.lower())使它做一些事情。但是我们只是装饰一个函数,使更新更干净和更容易(这是pythonic,IMHO).我想让您注意的是多个选项,这正是您所寻求的
最初,您希望执行以下操作:
# Considering update_many() works, as I always use "update". :)
accounts.update_many({}, {
'$set': {
'email': lower(email)
}
}, upsert=False)
你本可以做到:
# Considering update_many() works, as I always use "update". :)
accounts.update_many({}, {
'$set': {
'email': lower(email)
}
}, upsert=False, multi=True)
我希望这能有所帮助。我为您编写了一个更简洁的代码。:)
要回答下面的评论…“给出您的示例,用户名==”John“,如何将他的用户名和其他人的用户名转换为小写?”
您需要使用所有用户的共同点进行查询(这是目前的基本编程)。您可以进行如下查询:{'username':{'exists':True}
,或{'grade':'member'}
。在这里,它将返回每个用户,或每个成员用户(因为这是一个只有用户的集合)
然后,使用**kwargs
,使用您希望更新的值进行更新。诚然,现在这个问题还没有得到回答,因为您需要将argfunc
添加到update\u query\u in\u table
中,使其像一个符咒一样工作,如下所示:
def update_query_in_table(table, query, action='$set',
multi=False, func=lambda x: x, **kwargs):
""" Updates user information using **kwargs.
Either updates using action='$set' or deletes using action='$unset'
"""
update = {action : {}}
for key, value in kwargs.iteritems():
# By default, func does nothing.
update[action][key] = func(value)
upd = table.update(query, update, multi=multi)
默认情况下,func不做任何事情,但是您可以使用update(…),func=lambda x:x.lower())使它做一些事情。但是我们只是装饰一个函数,使更新更干净和更容易(这是pythonic,IMHO).我想让您注意的是多个选项,这正是您所寻求的
最初,您希望执行以下操作:
# Considering update_many() works, as I always use "update". :)
accounts.update_many({}, {
'$set': {
'email': lower(email)
}
}, upsert=False)
你本可以做到:
# Considering update_many() works, as I always use "update". :)
accounts.update_many({}, {
'$set': {
'email': lower(email)
}
}, upsert=False, multi=True)
我希望这会有所帮助。据我所知,您还不能在PyMongo(进程函数)中执行此操作。据我所知,您还不能在PyMongo(进程函数)中执行此操作.是的…我很害怕…好吧,我会把它标记为已解决,因为我不认为有一个“简单”的答案。是的…我很害怕…好吧,我会把它标记为已解决,因为我不认为有一个“简单”的答案。这是很好的代码和所有内容,但不会回答问题。举个例子,用户名=“John”,如何将他的用户名和其他人的用户名转换为小写?你的代码与我的代码有相同的缺陷。我在其中留下了大写字母,如果有人试图以“john”的身份登录,它将失败。我为您对我的帖子进行了一次干净的更新,我希望它能让您对您最初的问题有更多的了解。可能有点长,但我请您阅读它并给出您的意见。:)这是很好的代码,但并没有回答问题。举个例子,用户名==“John”,如何将他的用户名和其他人的用户名转换为小写?你的代码与我的代码有相同的缺陷。我在其中留下了大写字母,如果有人试图以“john”的身份登录,它会失败。我为您对我的帖子做了一个干净的更新,我希望它能让您对您最初的问题有更多的了解。它可能有点长,但我邀请您阅读它并给出您的意见。:)