Using MongoDB 4.0 I have to compute a new field basing on existing field. An example of documents in mycollection:
{
_id: ...,
f1: 'a',
f2: 'b'
}
My python code, after connecting to DB:
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)
However in DB I see:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: '$f1-myDelimiter-$f2'
}
But I want:
{
_id: ...,
f1: 'a',
f2: 'b',
f3: 'a-myDelimiter-b'
}
For the moment I am using pipeline aggregations. But other strategies are welcome.
You can use $concat operator to concat fields with delimiters,
I don't think it is possible to integrate into a query for python lang in current MongoDB v4.4,
There is a $function operator starting from MongoDB 4.4, There you can write
javascript
code and execute in query, but, it's expensive for query performance.I would suggest you to do this operation after the query on the result.