在Pymongo中传递一个聚合中间结果字段作为python函数参数



使用MongoDB 4.0,我必须在现有字段的基础上计算一个新字段。在mycollection中的文档示例:

{
_id: ...,
f1: 'a',
f2: 'b'
}

我的python代码,连接到DB:后

请注意,这里的myJoin只是示例。在实际使用场景中,此函数相当复杂(自定义密码计算和字节操作(。

def myJoin(left, right):
return left+'-myDelimiter-'+right

myPipeline = [
{
'$match': {
'f1': {
'$exists': True
}
}
}, {
'$addFields': {
'f3': myJoin('$f1', '$f2')
}
}
]
mydb.mycollection.aggregate(myPipeline)

然而,在DB中我看到:

{
_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'] }
}
}

我只是举个例子使用myJoin。我的自定义函数执行一系列加密计算和字节操作

我认为不可能在当前的MongoDB v4.4、中集成到python lang的查询中

从MongoDB 4.4开始有一个$function操作符,在那里你可以编写javascript代码并在查询中执行,但这对查询性能来说很昂贵。

我建议您在查询结果后进行此操作。

最新更新