как это работает с mon goose многократное обновление? - PullRequest
0 голосов
/ 17 марта 2020

Array;

 arr=[
  {
  id: [ '5e6e9b0668fcbc7bce2097ac', '5e6e9b0e68fcbc7bce2097af' ],
  color: [ 'a', 'b' ]
  }
 ]

Модели;

const varyant = Models.varyant

функция;

Promise.all(

 arr.map((item)=>{ 

 return varyant.updateMany({"_id": item.id }, {"$set":   { "color":"value" }  }, 

 {multi:true}); 

 })).then(function(results){

 });

эта функция выполнена успешно, цвет записи: "значение"

но изменить

 return varyant.updateMany({"_id": item.id }, {"$set":{ "color":{ $in: arr.color } }  },

nodejs вывод:

 (node:62738) UnhandledPromiseRejectionWarning: CastError: Cast to string failed for value "{ '$in': [ 'a', 'b' ] }" at path "color"

Где я делаю ошибку?

1 Ответ

1 голос
/ 17 марта 2020

$ in - это не оператор вставки, это оператор выбора

Вы можете изменить массив arr с помощью некоторого удобного формата

const arr = [{
  id: ['5e6e9b0668fcbc7bce2097ac', '5e6e9b0e68fcbc7bce2097af'],
  color: ['a', 'b']
}];

const new_arr = arr[0].id.map((id,i)=>({id,color:arr[0].color[i]}));

//[{id,color}]

Promise.all(
  new_arr.map((item, i) => {
    return varyant.updateMany({
      "_id": item.id
    }, {
      "$set": {
        "color": item.color,
      }
    }, {
      multi: true
    });

  })).then(function(results) {

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