我需要使用PyMongo将大量数据插入到我的MongoDB数据库中。我所拥有的数据目前存储在平面文件中并且是稀疏的(即,许多单独的值是NaN)。在Mongo DB中,如果值为NaN,我想不插入字段,但我不知道该怎么做(我应该指出我是MongoDB和Python的新手)。
我的插件启动看起来像这样
strategy.insert_many([
{
"strategyId": strategyInfo[stratIndex][ID],
"strategyName": strategyInfo[stratIndex][NAME],
"date": dates[i],
"time": thisTime,
"aum": stratAum[i],
"return":0.0,
"commission":0.0,
"slippage":0.0,
"basket":[{
"assetId": assets[m][ASSETID],
"order": orders[i, m],
"expiry": expiry[i, m],
"price": prices[i, m],
"ePrice": eprices[i, m] <<<Don't include line if eprices[i,m] is a NaN
}
for m in range(len(assets))
]
}
], False)
使用math.isnan()
查看我的某个值是否为NaN很容易,但我无法弄清楚如果这是一个空白案件。
答案 0 :(得分:0)
使用
math.isnan()
检查我的某个值是否为NaN很容易,但如果是这种情况,我无法弄清楚如何将整个字段留空。
根据您的示例代码,您可以执行以下操作:
# Create a strategy document.
# This is inside of a loop where variable `i` is known, similar to your example.
doc = {
"strategyId": strategyInfo[stratIndex][ID],
"strategyName": strategyInfo[stratIndex][NAME],
"date": dates[i],
"time": thisTime,
"aum": stratAum[i],
"return":0.0,
"commission":0.0,
"slippage":0.0
}
baskets = []
for m in range(len(assets)):
basket = {
"assetId": assets[m][ASSETID],
"order": orders[i, m],
"expiry": expiry[i, m],
"price": prices[i, m],
}
if not math.isnan(eprice[i, m]):
basket["ePrice"] = eprice[i, m]
baskets.append(basket)
# You can also add a filter here to make sure `baskets` array is not null.
doc["basket"] = baskets
docs.append(doc)
这基本上将制作文档和数据库插入分开。
然后您可以使用insert_many():
strategy.insert_many(docs, False)
您还可以将insert_many
包装在try / except中以检测数据库插入错误,这应该是与文档创建错误不同的错误处理。