Мне нужна помощь mongoDB запрос. Вот моя коллекция. Список воспроизведения в mongodb
JukeBox Collection
{
[
roomName : 'room1',
playlist :
[{ Filename: 'file1.mp3',
Filekeywords: 'party music, couples'
},
{ Filename: 'file2.mp3',
Filekeywords: 'fine dining, family , kids'
},
{ Filename: 'file1.mp3',
Filekeywords: 'elderly, family'
}]
},
roomName : 'room2',
playlist : [{
...
}...
]
}
Мне нужно вставить поле в один объект поля массива "PlayPosition: 15 #seconds", если имя файла совпадает с указанным в поле объекта. Ожидаемая коллекция после обновления:
JukeBox Collection
{
[
roomName : 'room1',
playlist :
[{ Filename: 'file1.mp3',
Filekeywords: 'party music, couples',
},
{
Filename: 'file2.mp3',
Filekeywords: 'fine dining, family,kids'
PlayPosition: 15 #seconds
},
{ Filename: 'file1.mp3',
Filekeywords: 'elderly, family',
}]
Я хочу обойти поле массива, найти соответствующее поле (имя файла), а затем вставить ключ «PlayPosition» + значение, если оно не существует. Если он существует, он должен обновить это поле. Я предполагаю, что мне нужно использовать update_one, я должен использовать «$ addToSet» для достижения этой цели. Моя служебная функция выглядит следующим образом:
UpdateCurrentPlayStatus(filename = "file2.mp3", position_in_seconds=15):
#What should be my query?
JukeBoxUpdate( {roomName: 'room1'},
{
"$addToSet":{
"playlist.$": {
"Filename": filename,#file2.mp3 . Does this filter
"PlayPosition": position_in_seconds
}
}
}
Это дает мне следующее исключение: pymon go .errors.WriteError: Оператор положения не нашел нужного соответствия в запросе.
Я не могу понять, что не так с запросом. Пожалуйста, помогите.