как использовать arrayFilters и $ push для одновременного обновления одного и того же поля массива - PullRequest
0 голосов
/ 26 июня 2018

модель следующим образом:

let gardenmodal = new mongoose.Schema({
    display:{type:Boolean, default:true},
    itemList:[{type:Number,count:Number}]
});

let GardenModel = db.model('GardenModel', gardenmodal);

документ следующим образом:

{ display: true,
  itemList:
   [ { type: 1, count: 200 },
     { type: 2, count: 81 },
     { type: 3, count: 78 } ],
  _id: 5b2e52144c73cb22fc77b92b,
  __v: 0 }

Я хочу обновить элемент с типом = 1, чтобы уменьшить его число 2, и элемент с типом= 2, чтобы уменьшить его num 3, в то же время новый элемент с его типом = 10, count = 100, нужно вставить в itemList, вот моя попытка:

let res = await GardenModel.findOneAndUpdate({},{
        $inc:{"itemList.$[elem1].count":-3, "itemList.$[elem2].count" : -2},
        $push:{"itemList":{ type: 10, count: 200 }}
    },{
        arrayFilters:[{"elem1.type":2},{"elem2.type":3}],
        new:true
    });

, но он работаетошибка:

(node:6596) UnhandledPromiseRejectionWarning: MongoError: Updating the path 'itemList.$[elem1].count' would create a conflict at 'itemList'
    at H:\node\wcgroup\node_modules\mongodb-core\lib\connection\pool.js:593:63
    at authenticateStragglers (H:\node\wcgroup\node_modules\mongodb-core\lib\connection\pool.js:516:16)
    at Connection.messageHandler (H:\node\wcgroup\node_modules\mongodb-core\lib\connection\pool.js:552:5)
    at emitMessageHandler (H:\node\wcgroup\node_modules\mongodb-core\lib\connection\connection.js:309:10)
    at Socket.<anonymous> (H:\node\wcgroup\node_modules\mongodb-core\lib\connection\connection.js:452:17)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:279:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at TCP.onread (net.js:636:20)

что мне делать?

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