Как обновить значение с помощью агрегата в mongodb и узле - PullRequest
0 голосов
/ 15 февраля 2019

Я публикую этот вопрос в отношении моего варианта использования .

Это правда, что есть много ответов на ту же тему, но Я не нашел ответа.

, поэтому я прошу вас о помощи. Спасибо.

Я бы хотел обновить lineItemStatus внутри lineItems массив.

Вот моя модель:

const orderSchema = new Schema(
 lineItems: [{
   lineItemStatus: {
    type: String,
    default: 'en waiting for validation',
    lowercase: true
    }
  }]
)

Результат выглядит следующим образом

{
  "_id": "5c659cd0be79c124126d5ec2",
  "lineItems": [{
        "lineItemStatus": "waiting for validation", //the status to update
        "_id": "1"
    },
    {
        "lineItemStatus": "delivered",
        "_id": "2"
    }
 ]
}

Сначала я могу получитьодин элемент lineItems.это код

async updateStatus(req, res) {
  let givenLineItemId = req.body.lineItemId
  let givenlineItemStatus = req.body.status // the status to update

  try {
    const ObjectId = mongoose.Types.ObjectId
    const aggregationStages = [
     {
       $unwind: '$lineItems'
     },
     {
       $match: {
         'lineItems._id': ObjectId(givenLineItemId)
       }
     }
    ]

   await Order
     .aggregate(aggregationStages)
     .exec(function(err, orders) {
     if (err) res.status(400).send(err)
     res.status(200).send(orders)
   })
   } catch (err) {
     return res.status(500).send(err)
   }
}

Но сейчас я не могу обновить lineItemStatus. Я вижу способ использовать set или pus h, но он не работает.

Большое спасибо за помощь.

1 Ответ

0 голосов
/ 15 февраля 2019

Сам этап агрегации не поддерживает обновления.У вас есть два варианта:

1) Соберите агрегированные результаты в переменную и выполните массовое обновление.См. ссылка .

2) Вызовите forEach в совокупности.Вы можете увидеть образцы, представленные в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...