Mongoengine:以嵌入文档为值的动态字段
Mongoengine: dynamic Fields with EmbededDocuments as values
到目前为止,我一直在使用 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。
我想用动态 fields/keys 创建文档,但将 embeddedDocument 作为值,这样我就可以拥有这样的文档:
{
"game1": {
"iscomplete": true,
"score": 23,
},
"game2": {
"iscomplete": false,
"score": 10,
}
}
这里有没有我可以实现的?
您可以使用 dynamic document in mongengine:
来实现
DynamicDocument documents work in the same way as Document but any
data / attributes set to them will also be saved
因此,您删除游戏字段,稍后添加您的动态字段游戏,如 game1、game2 等字段,它们将被保存。
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()
[注意 - 在下面的代码中使用 mongoengine 和 pandas]
以下代码用于读取 csv 文件并插入到 mongod 动态集合中。
示例 -: 将 csv 数据动态保存在 mongod 集合中。
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()
到目前为止,我一直在使用 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。
我想用动态 fields/keys 创建文档,但将 embeddedDocument 作为值,这样我就可以拥有这样的文档:
{
"game1": {
"iscomplete": true,
"score": 23,
},
"game2": {
"iscomplete": false,
"score": 10,
}
}
这里有没有我可以实现的?
您可以使用 dynamic document in mongengine:
来实现DynamicDocument documents work in the same way as Document but any data / attributes set to them will also be saved
因此,您删除游戏字段,稍后添加您的动态字段游戏,如 game1、game2 等字段,它们将被保存。
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()
[注意 - 在下面的代码中使用 mongoengine 和 pandas]
以下代码用于读取 csv 文件并插入到 mongod 动态集合中。
示例 -: 将 csv 数据动态保存在 mongod 集合中。
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()