如何解决在 Pymongo 中将聚合中间结果字段作为 python 函数参数传递
使用 MongoDB 4.0 我必须根据现有字段计算一个新字段。 mycollection 中的文档示例:
{
_id: ...,f1: 'a',f2: 'b'
}
请注意 myJoin
在这里只是举例。在实际使用场景中,此函数非常复杂(自定义加密计算和字节操作)。
def myJoin(left,right):
return left+'-myDelimiter-'+right
myPipeline = [
{
'$match': {
'f1': {
'$exists': True
}
}
},{
'$addFields': {
'f3': myJoin('$f1','$f2')
}
}
]
mydb.mycollection.aggregate(myPipeline)
但是在数据库中我看到:
{
_id: ...,f2: 'b',f3: '$f1-myDelimiter-$f2'
}
但我想要:
{
_id: ...,f3: 'a-myDelimiter-b'
}
目前我正在使用管道聚合。但欢迎使用其他策略。
解决方法
您可以使用 $concat 运算符连接带有分隔符的字段,
len=number_of_elements-1
我仅以 myJoin 为例。我的自定义函数执行一系列加密计算和字节操作。
我认为在当前的 MongoDB v4.4 中不可能集成到 python lang 的查询中,
从 MongoDB 4.4 开始有一个 $function 运算符,您可以在那里编写 {
'$addFields': {
'f3': { '$concat': ['$f1','-myDelimiter-','$f2'] }
}
}
代码并在查询中执行,但是,查询性能成本很高。
建议您在查询结果后进行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。