#python #database #mongodb #mongodb-query #pymongo
Вопрос:
Я новичок в MongoDB и пытаюсь понять, как поместить элемент в массив внутри объекта. Вот база данных:
{
"_id": {
"$oid": "605cee2f08588cb6263c33a4"
},
"userID": "9346",
"firstName": "James",
"sessionsLog": {
"date": [],
"timestamp": [],
"duration": []
}
},
{
"_id": {
"$oid": "605cee825ef711180adbc141"
},
"userID": "4778",
"firstName": "Rob",
"sessionsLog": {
"date": [],
"timestamp": [],
"duration": []
}
}
У меня есть дата, которую я хочу вставить в массив «дата» Роба: 3/30/2021.
Какова операция по введению этой новой даты в массив дат?
Это то, что я пробовал:
import pymongo
myclient = pymongo.MongoClient("...")
mydb= myclient["myDatabase"]
users = mydb["Users"]
userID = '4778'
dateToPush = '3/30/2021'
allUsers = users.find({}, {'_id': 1, 'userID': 1, 'sessionsLog': 1})
for u in allUsers:
if u.get('userID') == userID:
users.update_one(
{'userID': u.get('userID')},
{'$push': {'sessionsLog'['date']: dateToPush}}
)
Ответ №1:
https://docs.mongodb.com/manual/reference/operator/update/push/
Используйте .
для вложенных объектов в вашем запросе.
Изменить
'$push': {'sessionsLog'['date']: dateToPush}
Для
'$push': {'sessionsLog.date': dateToPush}
Демо — https://mongoplayground.net/p/30GIvWkHDV1
db.collection.update({
"userID": "9346"
},
{
$push: {
"sessionsLog.date": { a: 1, b: 2 }
}
})
Комментарии:
1. Также, вероятно, лучше иметь один массив с записями журнала вместо 3 массивов для 3 полей.
2. Работает отлично, именно то, что мне было нужно, спасибо.