2017-02-18 3 views
0

Mit MongoDB habe ich eine history Sammlung mit mehreren Dokumenten darin. Wenn initiatied, sie sehen diese wie:Hinzufügen von Dingen in ein MongoDB-Dokument mit 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) 
    } 
] 
} 

Mit PyMongo, würde ich eine Abfrage wie die Dinge in ein Dokument (zum Beispiel für das Dokument mit {'category' : 'blue'}), in dem timeline Elemente, so fügt hinzu:

{'_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) 
    } 
] 
} 

Das einzige, was ich (mit collection.update_one()) fand heraus, den vorherigen Inhalt löscht:

{'_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) 
    } 
] 
} 

Dank

+0

Können Sie zeigen, wie Sie 'update_one' verwenden? – Veeram

+0

'db.my_collection.update_one ({'Kategorie': 'blau'}, {'$ set': {'Zeitleiste': [{ 'score': 30, 'when': datetime.datetime.now() }]}} ' –

+1

Können Sie $ push anstelle von $ set versuchen? Push-Operator für Array und Set für Feld. – Veeram

Antwort

0

Verwenden Sie the update operator $push.

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