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

将军台

使用 MongoDB 4.0 我必须根据现有字段计算一个新字段。mycollection 中的文档示例:

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

我的python代码,连接到数据库后:

请注意,myJoin这里只是举例。在实际使用场景中,此函数非常复杂(自定义加密计算和字节操作)。

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

我仅以 myJoin 为例。我的自定义函数执行一系列加密计算和字节操作。

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

从 MongoDB 4.4 开始,有一个$function运算符,您可以在那里编写javascript代码并在查询中执行,但是查询性能很昂贵。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章