Итеративное обновление массива объектов в mongodb nodejs - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь обновить пару объектов в MongoDB в nodejs. Вот проблема, с которой я столкнулся:
У меня есть массив объектов, который выглядит примерно так:

[{
   "_id": {
        "$oid": "5ed611265828aa77c978afb4"
    },
    "advert_id": "5ec2e4a8bda562e21b8c5052",
    "isCategory": false,
    "name": "2+1 Ev Taşıma",
    "value": "2200 TL"
},
{
    "_id": "40", // this object is recently added so it doesn't 
                // have an oid it needs to be inserted instead of updating.
    "advert_id": "5ec2e4a8bda562e21b8c5052",
    "isCategory": false,
    "name": "4+1 Ev Taşıma",
    "value": "7000 TL"
},
]

Я пытаюсь обновить каждый из этих объектов, используя collection.updateMany с upsert: true Вот код, который я написал:

mongodb.collection('prices').updateMany({}, {$set: post.prices}, {upsert: true}, (error, result) => {
    if(error) throw error;
    res.json(response);
})

Вот ошибка:

MongoError: Modifiers operate on fields but we found type array instead. For example: {$mod: {<field>: ...}} not 
{$set: [ { _id: "5ed611265828aa77c978afb4", advert_id: "5ec2e4a8bda562e21b8c5052", isCategory: false, name: "2+1 
Ev Taşıma", value: "2000 TL", isVisible: false } ]}

Проблема заключается в том, что я пытаюсь передать массив цен непосредственно в канал $ set. Что такое тип поля и как я могу преобразовать в него свой массив.

Благодарю за помощь, у меня возникли трудности с поиском в документации, но не удалось найти ни одной связанной главы. Я буду очень признателен, если вы также можете связать часть документации в своем ответе.

Документ базы данных:

{
    "_id": {
        "$oid": "5ed611265828aa77c978afb4"
    },
    "advert_id": "5ec2e4a8bda562e21b8c5052",
    "isCategory": false,
    "name": "2+1 Ev Taşıma",
    "value": "2000 TL",
    "isVisible": false
}

1 Ответ

1 голос
/ 14 июля 2020

Я вижу здесь проблему {$set: post.prices}

Это должно быть {$set: {'prices':post.prices}} - Вы должны предоставить документ $set

Обратитесь

    db.col.find({
  '_id.$oid': '5ed611265828aa77c978afb4'
},
{
  $set: {
    "advert_id": "5ec2e4a8bda562e21b8c5052",
    "isCategory": false
  },
  {
    upsert: true
  }
}
...