使用mongoengine修改一起存储在Mongodb中的多个文档中的DictField
Modifying DictField in multiple documents together stored in Mongodb using mongoengine
我正在使用 mongo 引擎构建 mongo 数据库模型。我想通过在另一个函数
中创建的结果来修改DictField
from flask_mongoengine import MongoEngine
import marshmallow_mongoengine as ma
db = MongoEngine()
class TestData(db.Document):
name = db.StringField(max_length=50, required=True,unique=True)
num1 = db.IntField()
num2 = db.IntField()
ml_proc = db.DictField()
hum_proc = db.DictField()
class TestDataSchema(ma.ModelSchema):
class Meta:
model = TestData
数据库中的示例数据如下所示
示例数据
[{
"name" : "david",
"num1" : 5,
"num2" : 4,
"ml_proc": {"sm": 7, "prod":12}
},
{
"name" : "john",
"num1" : 1,
"num2" : 4
},
{
"name" : "dune",
"num1" : 5,
"num2" : 5,
"ml_proc": {"sm": 7, "prod":15}
},
{
"name" : "jan",
"num1" : 3,
"num2" : 4
}]
示例数据中的 4 个文档中,第 2 个和第 4 个文档缺少字段 ml_proc
。 ml_proc
中的字段是 sm
和 prod
,它们是根据字段 num1
和 num2
创建的,这些字段在定义为
的另一个函数中计算得出
import pandas as pd
def calc(data):
data["sm"] = data["num1"].apply(lambda x : x+2)
data["prod"] = data["num2"].apply(lambda x : x*2)
return data
我知道为什么需要这个功能很奇怪,但这对我的要求来说是一个非常简单的功能。我一次处理的文档数量将达到数千个。这就是为什么我使用 pandas 数据框进行处理的原因。所以我的疑问是如何使用 pandas 数据处理
生成的结果更新多个文档中的 Dictfield
感谢任何帮助,提前致谢
数据库
注意:不要对值取太多的conc。这只是一个示例图片。
也许你需要这样的东西:
db.collection.update({
"ml_proc": {
$exists: false
}
},
[
{
$addFields: {
ml_proc: {
sm: {
$sum: [
"$num1",
2
]
},
prod: {
$sum: [
"$num2",
2
]
}
}
}
}
],
{
multi: true
})
解释:
- 仅匹配“ml_proc”不存在的文档
- addFields 根据来自同一文档的 num1 和 num2 计算的“ml_proc”
- 用缺失的字段“ml_proc”更新所有匹配的文档。
我正在使用 mongo 引擎构建 mongo 数据库模型。我想通过在另一个函数
中创建的结果来修改DictField
from flask_mongoengine import MongoEngine
import marshmallow_mongoengine as ma
db = MongoEngine()
class TestData(db.Document):
name = db.StringField(max_length=50, required=True,unique=True)
num1 = db.IntField()
num2 = db.IntField()
ml_proc = db.DictField()
hum_proc = db.DictField()
class TestDataSchema(ma.ModelSchema):
class Meta:
model = TestData
数据库中的示例数据如下所示
示例数据
[{
"name" : "david",
"num1" : 5,
"num2" : 4,
"ml_proc": {"sm": 7, "prod":12}
},
{
"name" : "john",
"num1" : 1,
"num2" : 4
},
{
"name" : "dune",
"num1" : 5,
"num2" : 5,
"ml_proc": {"sm": 7, "prod":15}
},
{
"name" : "jan",
"num1" : 3,
"num2" : 4
}]
示例数据中的 4 个文档中,第 2 个和第 4 个文档缺少字段 ml_proc
。 ml_proc
中的字段是 sm
和 prod
,它们是根据字段 num1
和 num2
创建的,这些字段在定义为
import pandas as pd
def calc(data):
data["sm"] = data["num1"].apply(lambda x : x+2)
data["prod"] = data["num2"].apply(lambda x : x*2)
return data
我知道为什么需要这个功能很奇怪,但这对我的要求来说是一个非常简单的功能。我一次处理的文档数量将达到数千个。这就是为什么我使用 pandas 数据框进行处理的原因。所以我的疑问是如何使用 pandas 数据处理
生成的结果更新多个文档中的 Dictfield感谢任何帮助,提前致谢
数据库 注意:不要对值取太多的conc。这只是一个示例图片。
也许你需要这样的东西:
db.collection.update({
"ml_proc": {
$exists: false
}
},
[
{
$addFields: {
ml_proc: {
sm: {
$sum: [
"$num1",
2
]
},
prod: {
$sum: [
"$num2",
2
]
}
}
}
}
],
{
multi: true
})
解释:
- 仅匹配“ml_proc”不存在的文档
- addFields 根据来自同一文档的 num1 和 num2 计算的“ml_proc”
- 用缺失的字段“ml_proc”更新所有匹配的文档。