Не удается обновить многие значения с помощью функции azure - nodejs - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь использовать updateMany и обновить объект JSON, заполненный _id, и установить для поля winnerHasBeenNotified значение true, но если я console.log(listing), то получаю nModified: 0

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

Почему это?

var MongoClient = require('mongodb').MongoClient;



module.exports = async function (context, req) {


  MongoClient.connect(process.env.CosmosDBConnectionString, async (err, client) => {


    let listingId = ({ _id } = req.body);

    console.log("listing ID Value");
    console.log(listingId);
    let send = response(client, context);

    if (err) send(500, err.message);

    let db = client.db(process.env.dbName);


    const listing = await db.collection('listings').updateMany({ _id: listingId._id },
      {
        $set: { winnerHasBeenNotified: true }
      })

    //console.log(listing);
    if (!listing) {
      console.log("LISTING FAILED TO UPDATE")

      send(401, { message: "Something Went Wrong" });

    }
    else {
      console.log("LISTING HAS BEEN UPDATED")

      context.res = await { status: 200 };
    }

  })
}




function response(client, context) {
  return function (status, body) {
    context.res = {
      status: status,
      body: body
    };

    client.close();
    context.done();
  };
}

[3/24/2020 6:13:39 PM]   "method": "POST",
[3/24/2020 6:13:39 PM]   "uri": "/api/SetWinnerHasBeenNotifiedToTrue",
[3/24/2020 6:13:39 PM]   "identities": [
[3/24/2020 6:13:39 PM]     {
[3/24/2020 6:13:39 PM]       "type": "WebJobsAuthLevel",
[3/24/2020 6:13:39 PM]       "level": "Admin"
[3/24/2020 6:13:39 PM]     }
[3/24/2020 6:13:39 PM]   ],
[3/24/2020 6:13:39 PM]   "status": 200,
[3/24/2020 6:13:39 PM]   "duration": 58
[3/24/2020 6:13:39 PM] }
[3/24/2020 6:13:40 PM] listing ID Value
[3/24/2020 6:13:40 PM] [ { _id: '5e7948797d1b94622cebaab1' },
[3/24/2020 6:13:40 PM]   { _id: '5e7a325a38c8e58ee8fe39a3' },
[3/24/2020 6:13:40 PM]   { _id: '5e7a334438c8e58ee8fe39ab' } ]
[3/24/2020 6:13:40 PM] LISTING HAS BEEN UPDATED
[3/24/2020 6:13:42 PM] Host lock lease acquired by instance ID '000000000000000000000000179CDB79'.

функция. json

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "post",
        "patch",
        "put"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

ОБНОВЛЕНИЕ:

Итак, я понял, что мне нужно поместить mon goose .Types.ObjectId () вокруг идентификаторов и использовать строковый массив вместо JSON object.

Итак, это

      ["5e7ac19c6b3a266e8c612765",
        "5e7ac1cd6b3a266e8c612766",
        "5e7ac1f06b3a266e8c612767"
      ];

intead of

 [ { _id: '5e7948797d1b94622cebaab1' },
 { _id: '5e7a325a38c8e58ee8fe39a3' },
  { _id: '5e7a334438c8e58ee8fe39ab' } ]

У меня есть рабочий пример использования updateMany со строковым массивом, чтобы формат, который я использовал, который работал для меня. С mongoose.Types.ObjectId() я могу найти OneAndUpdate. Я не мог до этого внутри azure функции, но я все еще не могу заставить updateMany работать в azure функции. Он отправляет статус 200, но ничего не обновляется с updateMany Вот мой обновленный код:

var MongoClient = require('mongodb').MongoClient;
var mongoose = require('mongoose');


module.exports = async function (context, req) {


  MongoClient.connect(process.env.CosmosDBConnectionString, async (err, client) => {


    let auctionIds =
      ["5e7ac19c6b3a266e8c612765",
        "5e7ac1cd6b3a266e8c612766",
        "5e7ac1f06b3a266e8c612767"
      ];
    console.log("listing ID Value");
    //console.log(listingId);
    let send = response(client, context);

    if (err) send(500, err.message);

    let db = client.db(process.env.dbName);


    db
      .collection('listings')
      .updateMany(
        { _id: mongoose.Types.ObjectId(auctionIds) },
        { $set: { winnerHasBeenNotified: true } },
        (err, res) => {
          if (err) send(500, err.message);

          send(200, res);
        }
      );


  });


};


function response(client, context) {
  return function (status, body) {
    context.res = {
      status: status,
      body: body
    };

    client.close();
    context.done();
  };
}

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