2017-02-18 6 views
0

Используя MongoDB, у меня есть коллекция history с несколькими документами в ней. Когда initiatied, они выглядят так:Добавление вещей в документ MongoDB с использованием PyMongo

{'_id': ObjectId('58a71211545fc61fd8b2f420'), 
'category': 'blue', 
'last_update': datetime.datetime(2017, 2, 14, 0, 1), 
'timeline': [ 
    { 
    'score': 0, 
    'when': datetime.datetime(2017, 2, 14, 0, 1) 
    } 
] 
} 

{'_id': ObjectId('58a71211545fc61fd8b2f421'), 
'category': 'red', 
'last_update': datetime.datetime(2017, 2, 14, 0, 1), 
'timeline': [ 
    { 
    'score': 0, 
    'when': datetime.datetime(2017, 2, 14, 0, 1) 
    } 
] 
} 

Использование PyMongo, я хотел бы запрос, который добавляет вещи в документ (например, для документа с {'category' : 'blue'}), в timeline элемент, как это:

{'_id': ObjectId('58a71211545fc61fd8b2f420'), 
'category': 'blue', 
'timeline': [ 
    { 
    'score': 0, 
    'when': datetime.datetime(2017, 2, 14, 0, 1) 
    }, 
    { 
    'score': 10, 
    'when': datetime.datetime(2017, 2, 14, 0, 2) 
    }, 
    { 
    'score': 20, 
    'when': datetime.datetime(2017, 2, 14, 0, 3) 
    } 
] 
} 

Единственное, что я узнал (с collection.update_one()) стирает предыдущее содержимое:

{'_id': ObjectId('58a71211545fc61fd8b2f420'), 
'category': 'blue', 
'timeline': [ 
    { 
    'score': 10, 
    'when': datetime.datetime(2017, 2, 14, 0, 2) 
    }, 
    { 
    'score': 20, 
    'when': datetime.datetime(2017, 2, 14, 0, 3) 
    } 
] 
} 

Благодарности

+0

Можете ли вы показать, как вы используете 'update_one'? – Veeram

+0

'db.my_collection.update_one ({'category': 'blue'}, {'$ set': {'timeline': [{ 'оценка': 30, 'when': datetime.datetime.now() }]}} ' –

+1

Можете ли вы попробовать $ push вместо $ set? Оператор Push для массива и Set для поля. – Veeram

ответ

0

Использование the update operator $push.

db.my_collection.update_one({'category': 'blue'}, { 
    '$push': {'timeline': {'score': 30, 'when': datetime.datetime.now()}}}