Mi meta:
calcular:
"abrir" * 1.1
antes de que pymongo emita los datos, porque creo que sería más rápido
Los datos tienen el siguiente aspecto:
{ "_id": "000016.XSHE_2020-01-02-09-32", "order_book_id": "000016.XSHE", "datetime": { "$date": "2020-01-02T09:32:00.000Z" }, "num_trades": 0, "low": 4.3131, "close": 4.3228, "high": 4.3326, "total_turnover": 2826041, "volume": 639124, "open": 4.3228 } { "_id": "000016.XSHE_2020-01-02-09-33", "order_book_id": "000016.XSHE", "datetime": { "$date": "2020-01-02T09:33:00.000Z" }, "num_trades": 0, "low": 4.3131, "close": 4.3228, "high": 4.3326, "total_turnover": 1087488, "volume": 246300, "open": 4.3131 }....Estoy probando los siguientes códigos pero ninguno funciona:
tdcursor = MinutesDB.find({"order_book_id": "000016.XSHE", "datetime": {"$gte": recent11TradingDays[-1]}, "uplimit":{"$multiply":{"open": 1.1}}}, {"_id": 0, "order_book_id":1, "datetime": 1, "open": 1, "close": 1}) datadf = pd.DataFrame(tdcursor)o
multiply = MinutesDB.aggregate([ {"$group": {"order_book_id": "000016.XSHE", "uplimit": {"$multiply": ["$open", 1.1]} } } ]) datadf = pd.DataFrame(multiply)el código anterior da un error como el siguiente:
pymongo.errors.OperationFailure: The $in accumulator is a unary operator, full error: {'ok': 0.0, 'errmsg': 'The $in accumulator is a unary operator', 'code': 40237, 'codeName': 'Location40237'}¡Gracias por tu ayuda!
aquí hay una solución con un agregado
db.collection.aggregate([ { "$match": { "order_book_id": "000016.XSHE", } }, { "$project": { "uplimit": { "$multiply": [ "$open", 1.1 ] } } } ]) Dado que desea consultar solo los documentos que coinciden: order_book_id": "000016.XSHE , necesitará una etapa $match en el agregado
Y luego un $project para usar $multiply
Pruébalo aquí