在 Pymongo 中将聚合中间结果字段作为 python 函数参数传递
Pass an aggregate intermediate result field as python function argument in Pymongo
使用 MongoDB 4.0 我必须根据现有字段计算一个新字段。 mycollection 中的文档示例:
{
_id: ...,
f1: 'a',
f2: 'b'
}
我的 python 代码,连接到数据库后:
Please note that myJoin
is here just for example. In real use scenario this function is quite complex (custom cryptographic calculations and bytes manipulations).
def myJoin(left, right):
return left+'-myDelimiter-'+right
myPipeline = [
{
'$match': {
'f1': {
'$exists': True
}
}
}, {
'$addFields': {
'f3': myJoin('$f1', '$f2')
}
}
]
mydb.mycollection.aggregate(myPipeline)
但是在数据库中我看到:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: '$f1-myDelimiter-$f2'
}
但我想要:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: 'a-myDelimiter-b'
}
目前我正在使用管道聚合。但欢迎使用其他策略。
您可以使用 $concat 运算符连接带分隔符的字段,
{
'$addFields': {
'f3': { '$concat': ['$f1', '-myDelimiter-', '$f2'] }
}
}
I used myJoin just for example. My custom function perform a series of cryptographic computations and bytes manipulations.
我认为在当前 MongoDB v4.4,
中无法集成到 python lang 的查询中
从MongoDB 4.4开始有一个$function操作符,你可以写javascript
代码在查询中执行,但是,它对查询性能来说是昂贵的。
我建议您在查询结果后进行此操作。
使用 MongoDB 4.0 我必须根据现有字段计算一个新字段。 mycollection 中的文档示例:
{
_id: ...,
f1: 'a',
f2: 'b'
}
我的 python 代码,连接到数据库后:
Please note that
myJoin
is here just for example. In real use scenario this function is quite complex (custom cryptographic calculations and bytes manipulations).
def myJoin(left, right):
return left+'-myDelimiter-'+right
myPipeline = [
{
'$match': {
'f1': {
'$exists': True
}
}
}, {
'$addFields': {
'f3': myJoin('$f1', '$f2')
}
}
]
mydb.mycollection.aggregate(myPipeline)
但是在数据库中我看到:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: '$f1-myDelimiter-$f2'
}
但我想要:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: 'a-myDelimiter-b'
}
目前我正在使用管道聚合。但欢迎使用其他策略。
您可以使用 $concat 运算符连接带分隔符的字段,
{
'$addFields': {
'f3': { '$concat': ['$f1', '-myDelimiter-', '$f2'] }
}
}
I used myJoin just for example. My custom function perform a series of cryptographic computations and bytes manipulations.
我认为在当前 MongoDB v4.4,
中无法集成到 python lang 的查询中从MongoDB 4.4开始有一个$function操作符,你可以写javascript
代码在查询中执行,但是,它对查询性能来说是昂贵的。
我建议您在查询结果后进行此操作。