MongoDB ObjectID 的 JSON 序列化(ex-scope 查询)

Posted

技术标签:

【中文标题】MongoDB ObjectID 的 JSON 序列化(ex-scope 查询)【英文标题】:JSON serialization of MongoDB ObjectID (ex-scope query) 【发布时间】:2013-01-17 09:45:09 【问题描述】:

我很困惑为什么变量 temp_dict 在 else 条件之外可用?当我将数组保存到 MongoDB 时,它将在数组中的每个项目上设置 ObjectId。 Json 解析器不知道如何序列化 ObjectId。

def read_temporary_file(filename, has_header=False):
    wb = load_workbook(filename=filename, use_iterators=True)
    ws = wb.get_active_sheet()  # ws is now an IterableWorksheet

    headers = []
    rows = []
    documents = []

    for row in ws.iter_rows():  # it brings a new method: iter_rows()
        if has_header:
            has_header = False
            for cell in row:
                headers.append(cell.internal_value)
        else:
            temp_dict = OrderedDict()
            for cell in row:
                temp_dict[cell.column] = cell.internal_value
            rows.append(temp_dict)
            documents.append(temp_dict)

    print("Saving documents to MongoDB")
    __save(documents)
    print("Printing %s" % temp_dict)
    return (headers, rows)

【问题讨论】:

【参考方案1】:

在 Python 中,整个函数就是作用域。像 else 这样的子句并不是新的作用域。

【讨论】:

这很奇怪......所以基本上等待GC收集函数资源然后它被处置。关于如何在不创建另一个 OrderedDict() 的情况下解决此问题的任何想法 限定条件块会使它们几乎无用 - 代码将被覆盖在非本地定义中。您可以随时使用del temp_dict,但这就是 GC 的用途。亚历克斯在这里对del 的使用有一个很好的介绍 - ***.com/questions/2192926/…

以上是关于MongoDB ObjectID 的 JSON 序列化(ex-scope 查询)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB ObjectID 的 JSON 序列化(ex-scope 查询)

在 C# 中从序列化为 JSON 的 mongodb 文档中删除 ObjectId

连接mongoDB根据ObjectID写入json数据(初步)

如何在 HTTP 请求 JSON 正文中传递 mongodb ObjectId()?

MongoDB PHP:如何使用 JSON 提要获取 ObjectId? (它是空白的)

MongoDb - 要创建一个新的ObjectId,请尝试`Mongoose.Types.ObjectId`而不是使用`Mongoose.Schema.ObjectId`