使用更新清理数据 - Mongodb + Python

时间:2018-06-04 22:40:37

标签: python mongodb mongodb-query

我已将其导入Mongodb但无法清除Python中的数据。请参阅以下问题和脚本。我需要回答脚本1& 2

  • 将其导入MongoDB,清理Python中的数据,并使用已清理的数据更新MongoDB。具体来说,您将使用人员数据集,其中一些生日字段如下所示:

    { ... "birthday": ISODate("2011-03-17T11:21:36Z"), ... }

  • 其他生日字段如下所示:

    { ... "birthday": "Thursday, March 17, 2011 at 7:21:36 AM", ... }

  • MongoDB本身支持通过BSON的Date数据类型。此数据类型在第一个示例中使用,但在第二个示例中使用了纯字符串。在此评估中,您将完成附加的笔记本以编写使所有文档的生日字段成为日期的修补程序。

  • 将笔记本和数据集下载到笔记本目录。启动并运行笔记本后,在第三个单元格中更新了连接URI后,继续浏览单元格,直到到达第五个单元格,然后导入数据集。这可能需要10分钟,具体取决于您的Internet连接速度和计算机的计算能力。

  • 在验证所有文档已成功插入群集后,您将在第7个单元格中编写查询,以查找使用字符串作为生日字段的所有文档。

  • 为了验证您对此评估第一部分的理解,生日字段(单元格8的输出)有多少个文档具有字符串值?

SCRIPT1

  • 将yYYY替换为仅返回光标的人员原始集合的查询

  • 生日字段为字符串的文档

  • people_with_string_birthdays = YYYY

  • 这是验证您完成实验的答案:

    people_with_string_birthdays.count()

SCRIPT2

updates = []
# Again, we're updating several thousand documents, so this will take a little while
for person in people_with_string_birthdays:
    # Pymongo converts datetime objects into BSON Dates. The dateparser.parse function 
    # returns a datetime object, so we can simply do the following to update the field
    # properly. Replace ZZZZ with the correct update operator
    updates.append(UpdateOne(
        {"_id": person["_id"]}, 
        {ZZZZ: { "birthday": dateparser.parse(person["birthday"]) } }
    ))
    count += 1

    if count == batch_size:
        people_raw.bulk_write(updates)
        updates = []

    count = 0

if updates:         
    people_raw.bulk_write(updates)
    count = 0

# If everything went well this should be zero
people_with_string_birthdays.count()

2 个答案:

答案 0 :(得分:0)

脚本1:YYYY = people_raw.find({"Birthday" : {"$type" : "string"}})

答案 1 :(得分:0)

import json
with open("./people-raw.json") as dataset:
    array={}
    for i in dataset:
        a=json.loads(i)
        if type(a["birthday"]) not in array:
            array[type(a["birthday"])]=1
        else:
            array[type(a["birthday"])]+=1
    print(array)

如果JSON文件不在同一目录中,请在open()方法中提供people-raw.json文件的路径。

答案:10382