Обновить все поля во всем документе на основе другого поля в этом документе - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть студенческие документы в моей базе данных. Каждый документ является студентом и имеет поля amountOwed и tuition.

Я пытаюсь обновить amountOwed, чтобы оно равнялось текущему значению amountOwed + tuition.

Я думал об использовании .find запрос, чтобы получить все студенческие документы, просматривая каждый документ и обновляя базу данных.

Я также исследовал и нашел $set(aggregation) и $addFields(aggregation) в документации по монго, но я не уверен, смогу ли я использовать это для чегоЯ пытаюсь сделать.

Примеры документов:

{"studentName" : "Student1",

 "amountOwed" : 100,

 "tuition" : 100

},

{"studentName" : "Student2",

 "amountOwed" : 0,

 "tuition" : 500

}

Вывод должен быть:

{"studentName" : "Student1",

 "amountOwed" : 200,

 "tuition" : 100

},

{"studentName" : "Student2",

 "amountOwed" : 500,

 "tuition" : 500

}

Есть ли способ сделать все это в рамках одного запроса к базе данных?

Может быть, используя updateMany?

1 Ответ

0 голосов
/ 07 ноября 2019

Для добавления значений вы можете использовать $ add выражение запроса агрегации Монго.

Попробуйте использовать запрос:

db.collection.aggregate([
  {
    $project: {
      studentName: 1,
      tuition: 1,
      _id: 0,
      amountOwed: {
        $add: [
          "$amountOwed",
          "$tuition"
        ]
      }
    }
  }
])
...