我正在构建一个从API中提取数据并将其保存到MongoDB的工具。我为此使用了Python3和MongoEngine。
我能够提取数据并保存。这就是它在Mongo中的样子:https://pastebin.com/hjMtCznc
这是我用来保存数据的Python代码: https://pastebin.com/kqJw8VAc
这很有效。但我想每小时运行一次这段代码。然后,如果有新的
"campaign_id": "345775",
"zone_id": "5609698",
我想创建这个(upsert)
如果已经存储了该组合,我想以这种方式将数据附加到嵌入式集合中。
{
"_id": ObjectId("5ac8afa99d74e2e592586946"),
"campaign_id": "345775",
"zone_id": "5609698",
"timeData": [
{
"t1": ISODate("2018-04-07T00:00:00Z"),
"t2": ISODate("2018-04-07T13:46:48Z"),
"clicks": 1,
"unique_clicks": 1,
"unique_visits": 15,
"conversions": 1,
"visits": 17,
"payout": 80
},
{
"t1": ISODate("2018-04-07T00:00:00Z"),
"t2": ISODate("2018-04-07T14:46:48Z"),
"clicks": 0,
"unique_clicks": 0,
"unique_visits": 1,
"conversions": 0,
"visits": 1,
"payout": 0
}
]
}
这是我在Pymongo中定义的数据库结构:https://pastebin.com/1MreN3uB
我尝试line.update(upsert=True)
代替line.save()
提前致谢!
答案 0 :(得分:2)
当文档不存在时,执行Document update将numline
推送到TrackerData文档的timeData
字段。 e.g。
from mongoengine.errors import OperationError
try:
(
TrackerData.objects(
campaign_id=doc["campaign_id"],
zone_id=doc["token_1"]
)
.update(
push__timeData=numline, upsert=True
)
)
except OperationError as e:
logger.error(e)