在 mongodb 集合中导入 json?

Posted

技术标签:

【中文标题】在 mongodb 集合中导入 json?【英文标题】:Import json within mongodb collection? 【发布时间】:2020-04-30 11:15:38 【问题描述】:

我想将 MongoDB 集合中的 .json 文件作为字段导入,其中导入的数据基本上可以作为带有字段标签的子文档。这可能吗?我正在使用 Django 进行网络框架和文件上传。

现在 Django 中的数据模型如下所示:

class Trip(models.Model):
    name = models.CharField(max_length = 120)
    file = models.FileField(upload_to = 'trips/files/', null = True, blank = True)

我希望“文件”字段是一个 .json 导入,将子字段读入文档;例如,在 Mongo 中,数据模型如下所示:


    "_id": 
        "$oid": "5e18e9b0593b827d141e9c6d"
    ,
    "name": "f"
    "file": 
        "field1": "asdf"
        "field2": 1234
        "field3": 
            "fieldA": "3"
            "fieldB": "876"
        
    

“文件”下的字段在导入的 .json 文件中的位置。显然真正的 json 会更复杂,但这只是一个简单的例子。

如果可能,请告诉我,能够导入这些 .json 并在 Mongo 中正确处理它们就是我需要能够运行所需的一切。谢谢!

【问题讨论】:

【参考方案1】:

PyMongo 非常有用。它提供了 insert_one() 函数,其工作方式与典型的 mongo 插入相同。查看文档here。 您可能需要一个基于您的模型的函数。您还需要合并 PyMongo 要求才能使用它。

试试这个:

import pymongo

client = pymongo.MongoClient("localhost:27017")
db = client.your_database #Database
col = db.your_collection #Collection

class Trip(models.Model):
    name = models.CharField(max_length = 120)
    file = models.FileField(upload_to = 'trips/files/', null = True, blank = True)

    def insert_into_collection(self):
        col.insert_one('uploaded_file':file)

【讨论】:

我不确定这是否是一个愚蠢的问题,但我需要在 models.py 中调用数据库吗?我已经在项目的设置文件中设置了连接。有没有办法引用它而不是打开与 MongoClient() 的连接,或者我是愚蠢的,不明白这应该如何工作?不过还是谢谢,因为这已经在帮助我了。 @frz 您可以改为通过 views.py 创建一个连接,将文件插入到 mongo 数据库中。这很可能是一个更简单的解决方案。它大致必须在用户上传文件时起作用,然后将该文件本身保存到数据库中。

以上是关于在 mongodb 集合中导入 json?的主要内容,如果未能解决你的问题,请参考以下文章

从 mongodb 集合中导出有效的 json

如何使用 Robomongo 从 MongoDB 导出 JSON

从MySQL中导入数据到MongoDB中

如何在 Jest 测试中导入 JSON 文件?

如何使用对象解构在 TypeScript 中导入 JSON?

Mongodb/Mongoose bulkwrite(upsert) 性能问题