Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在MongoEngine中插入和嵌入文档_Mongodb_Python 3.x_Pymongo_Upsert - Fatal编程技术网

Mongodb 在MongoEngine中插入和嵌入文档

Mongodb 在MongoEngine中插入和嵌入文档,mongodb,python-3.x,pymongo,upsert,Mongodb,Python 3.x,Pymongo,Upsert,我正在构建一个从API中提取数据并将其保存到MongoDB的工具。我用Python3和MongoEngine来做这个 我能够提取数据并保存它。这是Mongo中的外观: 这是我用来保存数据的Python代码: 这很有效。但是我想每小时运行一次代码。那么如果有新的 "campaign_id": "345775", "zone_id": "5609698", 我要创建此(向上插入) 如果组合已经存储,我希望以这种方式将数据附加到嵌入的集合中 { "_id": ObjectId("5

我正在构建一个从API中提取数据并将其保存到MongoDB的工具。我用Python3和MongoEngine来做这个

我能够提取数据并保存它。这是Mongo中的外观:

这是我用来保存数据的Python代码:

这很有效。但是我想每小时运行一次代码。那么如果有新的

   "campaign_id": "345775",
   "zone_id": "5609698",
我要创建此(向上插入)

如果组合已经存储,我希望以这种方式将数据附加到嵌入的集合中

{
  "_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中定义的数据库结构:

我尝试执行
line.update(upsert=True)
而不是
line.save()

提前谢谢

当TrackerData文档不存在时,执行一次将
numline
推送到
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)