首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMongo -将属性中的所有值设置为小写

问PyMongo -将属性中的所有值设置为小写
EN

Stack Overflow用户
提问于 2017-12-30 04:44:00
回答 2查看 1K关注 0票数 1

我正在清理一个数据集,并且有一个字段性别。在这个领域中,有一些条目,如男性、男性和男性。为了解决这个问题,我尝试使用pymongo更新我的MongoDB数据库。

在数据库中,性别属性是性别(前面是大写G)。

我的代码当前如下所示:

代码语言:javascript
复制
import pymongo
from pymongo import MongoClient


db_info = {
    'db_name': 'MentalHealth',
    'collection_name': 'MentalHealth',
}

if __name__ == "__main__":

    mongo_client = MongoClient()
    mongo_db = mongo_client[db_info['db_name']]
    mongo_collection = mongo_db[db_info['collection_name']]

    #normalize to lowercase
    mongo_collection.aggregate([{ '$project': { 'Gender':{ '$toLower':"$Gender"}}}])

代码运行时没有问题,但是数据库没有更新,我不确定代码的错误是什么。任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-30 05:27:09

您正在使用聚合查询,它将返回所有Gender字段转换为小写的结果。如果希望更新字段的值,则必须使用update查询。

由于您正在使用pymongo查询文档,所以您的代码应该如下所示

代码语言:javascript
复制
import pymongo
from pymongo import MongoClient
from bson.objectid import ObjectId

db_info = {
    'db_name': 'MentalHealth',
    'collection_name': 'MentalHealth'
}

if __name__ == "__main__":

     mongo_client = MongoClient()
     mongo_db = mongo_client[db_info['db_name']]
     mongo_collection = mongo_db[db_info['collection_name']]

     for doc in mongo_collection.find(no_cursor_timeout=True):
            pk = ObjectId(str(doc.get("_id")))
            g = doc.get('Gender')
            if g:
               g = g.lower()
               mongo_collection.update({"_id": pk}, {"$set":{"Gender":g}}) 
票数 2
EN

Stack Overflow用户

发布于 2017-12-30 04:56:51

Mongodb聚合操作处理数据记录并返回计算结果。它不能更新任何收藏。您可以像这样更新

代码语言:javascript
复制
db.mongo_collection.find({}).forEach(function(doc) {
    db.mongo_collection.update(
        { "_id": doc._id },
        { "$set": { "Gender": doc.Gender.toUpperCase() } }
    );
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48031026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档