#node.js #mongodb #mongodb-query
Вопрос:
В настоящее время я пишу запрос MongoDB для обновления набора запросов в БД, требуется извлечь записи бд, в которых есть mediaOrigin = «Kaltura» и MediaType= «YOUTUBE», затем обновить записи как mediaOrigin= «AWS» и mediaUrl.dataURL и mediaUrl.downloadUrl со значением mediaUrl.originalUrl. Итак, я завершил сценарий для обновления соответствующих запросов, но значение, которое принимают mediaUrl.dataURL и mediaUrl.downloadUrl, не определено. Итак, как я могу это решить, мне нужно заполнить эти два поля значением mediaUrl.originalUrl.
Вот запрос, который я написал,
try {
db.getCollection('media').find({mediaOrigin: { $eq: 'KALTURA' }, mediaType: {$eq: 'YOUTUBE' }, delete: false
})
.forEach(function(media) {
var youtubeUrl = media.mediaUrl.originalUrl;
var Url = youtubeUrl;
db.getCollection('media').update(
{
_id: media._id
},
{
$set: {
'mediaUrl.downloadUrl': Url,
'mediaUrl.dataUrl': Url,
mediaOrigin: 'AWS'
}
}
);
});} catch (e) {
print(e);}
Так как же я могу это решить?
Здесь я прикрепил пример записи в БД, которую мне нужно обновить.
Ответ №1:
Вы прикрепляете .forEach
конец .find()
метода, чтобы получить результаты из вашей коллекции.
Вам нужно подождать, чтобы получить результаты, прежде чем отправлять результат в foreach.
Так что используйте его вот так:
const medias = await db.getCollection('media').find({
mediaOrigin: { $eq: 'KALTURA' },
mediaType: {$eq: 'YOUTUBE' },
delete: false
}).toArray();
medias.forEach(async(media) => {
var youtubeUrl = media.mediaUrl.originalUrl;
var Url = youtubeUrl;
await db.getCollection('media').update(
{
_id: media._id
},
{
$set: {
'mediaUrl.downloadUrl': Url,
'mediaUrl.dataUrl': Url,
mediaOrigin: 'AWS'
}
}
);
});