Монго db обновить объект внутри встроенного объекта массива - PullRequest
0 голосов
/ 20 сентября 2019
{
  "_id": "5d845d17008e24001223005d",
  "product_brand_name": "WAREHOUSE",
  "product_sku": "45203591500",
  "product_name": "UTILITY PIQUE SHIRT",
  "product_description": "Fabric: Main, 48% nylon, 52% viscose\r\nWash Care: Machine wash",
  "product_price": 69,
  "product_attribute": [{
      "attribute_name": "color",
      "attribute_value": "White / Stone"
    },
    {
      "attribute_name": "size",
      "attribute_value": "12"
    }
  ],
  "product_images": [{
    "image_name": "sample Image",
    "image_url": null
  }],
  "product_volumes": [{
      "volume_location": {
        "_id": "5d8491ebcc31ba001bdc9b88",
        "location_name": "nasscom bangalore",
        "location_Address": "Bangalore"
      },
      "quantity": 4
    },
    {
      "volume_location": {
        "_id": "5d8491ebcc31ba001bdc9b87",
        "location_name": "nasscom Delhi",
        "location_Address": "Delhi"
      },
      "quantity": 3
    }
  ]
}

это коллекция продуктов, которую я хочу обновить.

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

, поэтому я пытаюсь найти и обновить продукт с идентификатором продукта и product_volumes.volume_location.location_name и настройкой product_volumes. $. Количество с разницей текущего количества и приобретенного количества.

это код, который я пытаюсь.

exports.purchase = function (req, res) {
    Customer.findByIdAndUpdate(req.body.customer, { $set: { "customer_cart": null } }).then(function (doc) {
        const prods = req.body.products;

        let requests = prods.reduce((promiseChain, item) => {
            return promiseChain.then(() => new Promise((resolve) => {
                console.log("Promise started");
                Product.findByIdAndUpdate({
                    "_id" : item.product,
                    "product_volumes.volume_location.location_name": item.pickup_location.location_name
                },{
                    $set:{
                        "product_volumes.$.quantity" : { $subtract: [ product_volumes.$.quantity, item.product_quantity ] }
                    }
                }).then(resolve)

            }));
        }, Promise.resolve());

        requests.then(() => {
            console.log("done");
            res.send(req.body);
        })
    });
};

это ошибка, которую я получаю.

The positional operator did not find the match needed from the query.
     at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:443:61)
     at Connection.emit (events.js:198:13)
     at processMessage (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:364:10)
     at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:533:15)
     at Socket.emit (events.js:198:13)
     at addChunk (_stream_readable.js:288:12)
     at readableAddChunk (_stream_readable.js:269:11)
     at Socket.Readable.push (_stream_readable.js:224:10)
     at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...