Как обновить определенное поле в массиве, которое соответствует запросу в документе Mongodb?

#node.js #reactjs #mongodb

#node.js #reactjs #mongodb

Вопрос:

У меня есть документ, который выглядит следующим образом:

 { 
    "_id" : ObjectId("5f55fdede873f132ec09207e"), 
    "edition_id" : NumberInt(35889464), 
    "title" : "TEAM ROCKET EDITION", 
    "date" : "2020-09-19T10:00:00.000 0000", 
    "homescreen" : {
        "image" : "https://media3.giphy.com/media/oOfLwhLyRUoRW/giphy.gif", 
        "song" : "5T8l7ciAo4H3NGFld8c9Ow"
    }, 
    "teams" : [
        {
            "team_id" : "8675309", 
            "team_name" : "", 
            "team_code" : ""
        }, 
        {
            "team_id" : "7779311", 
            "team_name" : "", 
            "team_code" : ""
        }, 
        {
            "team_id" : "79369254", 
            "team_name" : "", 
            "team_code" : ""
        }
    ]
}
 

Я пытаюсь сформировать запрос MongoDB, который найдет соответствие team_id и обновит team_name для этого элемента массива. Я попробовал несколько вещей в этой структуре:

 import { connectToDatabase } from 'utils/mongodb';

export default async (req, res) => {
  const { db } = await connectToDatabase();
  const {
    query: { edition_id, team_name, team_id },
  } = req;

  console.log({ req });

  const edition = await db.collection('editions').findOneAndUpdate(
    { edition_id: parseInt(edition_id) },
    {
      $set: {

      },
    },
  );
  res.json(edition);
};
 

но я не могу сформулировать правильный запрос.

Ответ №1:

Пожалуйста, проверьте этот запрос,

   const edition = await db.collection('editions').updateOne(
    { 'teams.team_id': '8675309' },
    {
      $set: {
          'teams.$.team_name': 'team_name_value'
      },
    },
  );
 

Комментарии:

1. Это сработало! Однако мне нужно, чтобы оно также соответствовало edition_id , поскольку то же team_id самое будет существовать в нескольких документах . , ,