如何正确更新MongoDB timeseries数组而不重复?

2024-04-26 03:11:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mongodb文档中嵌套了以下timeseries数组(名为“data”):

"_id" : ObjectId("5a235e645bb1000704593960"), 
"data" : [
    {
       "Volume" : NumberLong(41527200), 
       "Adj Close" : 171.850006, 
       "High" : 172.139999, 
       "Low" : 168.440002, 
       "Date" : ISODate("2017-11-30T00:00:00.000+0000"), 
       "Close" : 171.850006, 
       "Open" : 170.429993
    }, 
    {
        "Volume" : NumberLong(39726100), 
        "Adj Close" : 171.050003, 
        "High" : 171.669998, 
        "Low" : 168.5, 
        "Date" : ISODate("2017-12-01T00:00:00.000+0000"), 
        "Close" : 171.050003, 
        "Open" : 169.949997
    }, 
    {
        "Volume" : NumberLong(39759300), 
        "Adj Close" : 171.050003, 
        "High" : 171.669998, 
        "Low" : 168.5, 
        "Date" : ISODate("2017-12-01T00:00:00.000+0000"), 
        "Close" : 171.050003, 
            "Open" : 169.949997
        }, 

    ], 
    "ticker" : "AAPL", 
    "last_update" : ISODate("2017-12-07T00:00:00.000+0000")
}

我的问题是,当我更新timeseries时,给定日期的一些数组元素可能会更改。例如,在数组中有2条2017-12-01的记录。除“Volume”外,所有字段都相同。但是,当我更新数组时,会向数组中添加一条新记录,而不是更新现有的2017-01-01记录。你知道吗

我目前正在更新以下文档:

self.__db.equity_data.update({'ticker': ticker,
                              'last_update': {'$lt': record['last_update']}},
                             {'$set': {'last_update':record['last_update']},
                              '$addToSet': {'data': {'$each': record['data']}}}, 
                               upsert=True
                                 )

是否有任何方法可以确保不将重复项(基于日期)添加到数组中,而是更新现有数组元素?你知道吗

谢谢你的帮助。你知道吗


Tags: closedatadate记录update数组openlow
1条回答
网友
1楼 · 发布于 2024-04-26 03:11:50

我不熟悉pymongo,但是您是否尝试过将upsert标志设置为false?如果其余的语句是正确的,它应该防止创建新文档而不是更新旧文档。另外,您应该尝试添加multi标志,因为上面的代码在默认情况下只更新一个文档。 祝你好运!你知道吗

相关问题 更多 >