我有以下timeseries数组(名为“data”),嵌套在mongodb文档中:
"_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")
}
我的问题是,当我更新时间序列时,给定日期的某些数组元素可能会发生变化。例如,在数组中有2017-12-01的2条记录。除“卷”外,所有字段都相同。但是,当我更新阵列时,会向阵列添加新记录,而不是更新现有的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
)
有什么方法可以确保不会将重复的项目(基于日期)添加到数组中,而是更新现有的数组元素?
感谢您的帮助。
答案 0 :(得分:0)
我对pymongo不熟悉,但您是否尝试将upsert
标记设为false
?如果其他语句正确,它应该阻止创建新文档而不是更新旧文档。此外,您应该尝试添加multi
标志,因为上述代码默认只更新一个文档。
祝你好运!