Ошибка приведения к строке для значения "{_id: 5bd587cffb6fc074abb12cb8, \ n name: \ 'name 2 \', \ n year: \ '4 \', \ n id: \ '102 \'}" по пути "winner" - PullRequest
0 голосов
/ 28 октября 2018

Моя база данных:

Победители:

{
    "_id": {
        "$oid": "5bd58921fb6fc074abb12ce8"
    },
    "id": "301",
    "winner": [
        "101",
        "102"
    ]
}

Модель победителя здесь

var winner = new Schema({
  _id: String,
  id: String,
  winner:[ String ]
},
  {
  strict: false
});
var Winner = mongoose.model('winner', winner);

значения 101 и 102 в массиве победителей в коллекции победителей должны быть обновлены на {"sample": "data"}

 var result = [{"id": "101" },{"id": "102" }];
 var length = result.length;
 for(var i=0;i<length;i++)
  {
  Winner.updateMany(
    { "winner" : result[i].id },
    { $set: { "winner" : result[i] } }, function (err,output) {
      if(err) 
      {
      console.log(err);
      }
      else
      {
      console.log(output);
      }
    }
 );
}

Ожидаемый результат:

Коллекция победителей должна быть обновлена ​​до

победители:

{
    "_id": {
        "$oid": "5bd58921fb6fc074abb12ce8"
    },
    "id": "301",
    "winner": [
        {"sample":"data"},
        {"sample":"data"}
    ]
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Update Many используется для обновления нескольких документов, а не нескольких значений в одном документе.В вашем случае, что вам нужно сделать, это ..

find winner collection of your and store it to variable `winners`

winners.winner = winners.winner.reduce((acc, value) => {
    acc.push({"data": value})
    return acc;
}, []);

winners.save();
0 голосов
/ 28 октября 2018

Сначала вы вставляете массив строк, но позже вы хотите сохранить массив объектов.Схема Mongoose не позволит этого.Вам придется обновить схему с winner:[ String ] до winner:[{sample: String}] и сохранить массив объектов на первом месте.

{
    "_id": {
        "$oid": "5bd58921fb6fc074abb12ce8"
    },
    "id": "301",
    "winner": [
        {"sample": "101"},
        {"sample": "102"}
    ]
}

Редактировать: Также вы хотите обновить

Winner.updateMany(
    { "winner" : result[i].id },
    { $set: { "winner" : result[i] } },
.
.

до

Winner.updateMany(
    { "winner.sample" : result[i].id },
    { $set: { "winner" : result[i] } },
.
.
...