은 내가 MongoDB의 문서에 중첩 다음과 같은 시계열 배열 ("데이터"라는 이름의)를 가지고MongoDB timeseries 배열을 중복없이 올바르게 업데이트하는 방법은 무엇입니까?
"_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
)
내가 (날짜 기준) 중복 항목이 배열에 추가되지 않도록하고, 대신에 업데이트 할 수있는 방법이됩니다 기존의 배열 요소?
도움 주셔서 감사합니다.
응답 해 주셔서 감사합니다. 나는 upsert가 문서 수준에 적용된다고 생각한다. 배열 수준입니다. 나는 틀린 것일지도 모른다. upsert = False로 시도했지만 원하는 결과를 얻지 못했습니다. –