在 MongoEngine 中更新和嵌入文档
Upsert and embedded documents in MongoEngine
我正在构建一个从 API 中提取数据并将其保存到 MongoDB 的工具。为此,我正在使用 Python3 和 MongoEngine。
我可以提取数据并保存。这是它在 Mongo 中的样子:https://pastebin.com/hjMtCznc
这是我用来保存数据的 Python 代码:
https://pastebin.com/kqJw8VAc
这行得通。但是我想每小时 运行 这段代码。那么如果有新的
"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 中定义的数据库结构:https://pastebin.com/1MreN3uB
我尝试 line.update(upsert=True)
而不是 line.save()
提前致谢!
执行 Document update 将 numline
推入 TrackerData 文档的 timeData
字段,同时在文档不存在时进行更新。 例如
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)
我正在构建一个从 API 中提取数据并将其保存到 MongoDB 的工具。为此,我正在使用 Python3 和 MongoEngine。
我可以提取数据并保存。这是它在 Mongo 中的样子:https://pastebin.com/hjMtCznc
这是我用来保存数据的 Python 代码: https://pastebin.com/kqJw8VAc
这行得通。但是我想每小时 运行 这段代码。那么如果有新的
"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 中定义的数据库结构:https://pastebin.com/1MreN3uB
我尝试 line.update(upsert=True)
而不是 line.save()
提前致谢!
执行 Document update 将 numline
推入 TrackerData 文档的 timeData
字段,同时在文档不存在时进行更新。 例如
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)