3

到目前为止,我一直在使用 MapField:

class Game(EmbeddedDocument):
    iscomplete = BooleanField()
    score = IntField()
    #other not dynamic fields


class Progress(Document):
    user = ReferenceField(User, dbref=True)
    games = MapField(EmbeddedDocumentField(Game))
    created_at = DateTimeField()
    updated_on = DateTimeField()

我需要将游戏转换为 ReferenceField。

我想创建具有动态字段/键但以嵌入文档为值的文档,以便我可以拥有如下文档:

{
    "game1": {
        "iscomplete": true,
        "score": 23,
        },
    "game2": {
        "iscomplete": false,
        "score": 10,
        }
}

反正我能做到吗?

4

2 回答 2

2

您可以在 mongengine 中使用动态文档来实现:

DynamicDocument 文档的工作方式与 Document 相同,但也将保存为其设置的任何数据/属性

因此,您删除游戏字段,稍后将动态字段游戏添加为游戏 1、游戏 2 等字段,它们将被保存。

class Game(EmbeddedDocument):
    iscomplete = fields.BooleanField()
    score = fields.IntField()    

class Progress(DynamicDocument):
    user = ReferenceField(User, dbref=True)
    created_at = DateTimeField()
    updated_on = DateTimeField()

    p = Progress()
    p.game1 = Game(iscomplete=True, score=10)
    p.game2 = Game(iscomplete=False, score=5)
    p.save()
于 2016-09-06T18:46:34.590 回答
0

[注意- 下面的代码使用 mongoengine 和 pandas]

下面的代码用于读取 csv 文件并插入到 mongod 动态集合中。

示例- :动态保存 mongod 集合中的 csv 数据。

import mongoengine as me
class DynamicDoc(me.DynamicDocument):
    any_field = me.StringField()
import pandas as pd

all_csv_records = data_frame.to_dict('records')
data_frame = pd.read_csv(file_path)
for data in all_csv_records:
    report_data = DynamicDoc()
    DynamicDoc.any_field = str('temp_data')
    for col, row in data.iteritems():
        report_data[col] = row
    report_data.save()
于 2020-05-21T19:25:04.713 回答