Я пытаюсь использовать 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();
};
}