dict
MongoDB의 목록에 하나를 추가 하고 날짜별로 정렬하고 이전 항목을 잘라야합니다.
다음 코드는 MongoDB에서 직접 실행할 때 (robomongo 클라이언트 사용) 작업을 완벽하게 수행합니다.
db.products.update(
{ _id: ObjectId("549598b641ba00e6b7aacd45") },
{
$push: {
prices: {
$each: [{'d': ISODate("2015-01-13T01:13:00.201Z"), 'v': 105.3}],
$sort: {'d': -1},
$slice: -30
}
}
}
)
그러나 PyMongo에서 작업을 다시 작성하고 실행하면 먼저 이전 배열을 지우고 새 배열 만 추가하고 하나의 레코드 만 남깁니다.
PyMongo 코드 :
self.db['products'].update(
{'source_url': item['source_url']},
{
'$push': {
'prices': {
'$each': [{'d': datetime.utcnow(), 'v': 107.8}],
# '$sort': {'d': -1},
# '$slice': -30
}
}
},
)
심지어 댓글을 달았 sort
및 작업은 이전의 것들을 유지되지 않습니다.slice
push
이 프로세스는 스크래피 0.24.4 파이프 라인, PyMongo 버전 2.7.1, Mongo 버전 2.6.4 내에서 실행됩니다.
문제 해결 : find_and_modify
모든 데이터가 손실되기 전에 다른 기능에서 사용 하고있었습니다.
귀하의 코드는 PyMongo와 함께 작동합니다.
>>> db = MongoClient().test
>>> db.products.insert({'source_url': 'x'})
ObjectId('54ba45a6ca1ce9489f5778b2')
>>> from datetime import datetime
>>> db.products.update({'source_url': 'x'}, {'$push': {
'prices': {
'$each': [{'d': datetime.utcnow(), 'v': 107.8}]}}})
>>> len(db.products.find_one()['prices'])
1
>>> db.products.update({'source_url': 'x'}, {'$push': {
'prices': {
'$each': [{'d': datetime.utcnow(), 'v': 107.8}]}}})
>>> len(db.products.find_one()['prices'])
2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다