在pymongo中更新数组

时间:2019-07-10 09:27:26

标签: python mongodb pymongo

我试图在mongodb中维护一些计数器,所以我需要定期更新它们。当数据结构为单个级别时,我的代码可以正常工作:

mlcol.find_one_and_update({"connip": conip}, {"$inc":{ts:1}}, upsert=True)

结果是这样的结构:

{
    "connip": "a",
    "1":1,
    "2":1,
    "3":1,
    "4":1
}

我想将数据结构转换为如下形式:

{
    "connip": "a",
    "timeline": [
        {
            "timeslot": "1",
            "counter": 1
        },
        {
            "timeslot": "2",
            "counter": 1
        }
    ]
}

当我发送此命令时:

mlcol.find_one_and_update({"connip": "a", "timeline.timeslot": "c"}, {"$inc":{"timeline.$.counter":1}}, upsert=True)

我获得了已经存在的计数器的正确更新,但是如果是新计数器,则会收到以下错误:

pymongo.errors.OperationFailure: The positional operator did not find the match needed from the query.

似乎有必要首先启动insetr_one命令:

ne = {"connip": "a","timeline":[{"timeslot": "c","counter":1},{"timeslot": "d","counter":1}]}
mlcol.insert_one(ne)

在以前不存在计数器的情况下,是否有任何方法可以强制创建计数器?平面结构中的命令可以正确执行此操作。

0 个答案:

没有答案