Удалите значение из массива объекта в массиве в документе базы данных Mongo

#javascript #node.js #mongodb #mongoose #mongodb-query

Вопрос:

Добрый день и спасибо, что уделили время моему вопросу!

Я нахожусь в процессе обучения кодированию, и это мой первый вопрос здесь:

У меня есть коллекция MongoDB, которая структурирована так, как показано в следующем примере. Каждый документ представляет период, за который пользователи предоставили доступ.

 {
    "_id": id,
    "period": 20218,
    "availabilities": [{
        "User": id1,
        "Username": "Cool Guy",
        "Useravailabilities": [9, 13, 14, 28, 29]
    }, {
        "User": id2,
        "Username": "Nice Guy",
        "Useravailabilities": [1, 2, 13, 29, 30]
    }],
}
 
 
{
    "_id": id,
    "period": 20219,
    "availabilities": [...],
}
 
 {
    "_id": id,
    "period": 202110,
    "availabilities": [...],
}
 

Я получаю период (например, 20218), идентификатор пользователя (например, id2) и день (например, 13), которые должны быть удалены из соответствующего массива Useravailabilities. Этот запрос не выполняет свою работу, может кто-нибудь, пожалуйста, помочь?

DB.updateOne({"period": 20218, "availabilities.User": id2 }, {$pull : {"availabilities.$.Useravailabilities": 13}} )

Заранее благодарю вас и приятного вам дня

Ответ №1:

  DB.updateOne(
    { period: 20218 },
    { $pull: { 'availabilities.$[elem].Useravailabilities': 13 } },
    { arrayFilters: [{ 'elem.User': id2 }] }
  );
 

Комментарии:

1. Спасибо за ваш ответ. Теперь я понимаю: Error: Could not find path "undefined.0.User" in schema at castArrayFilters может быть, это как-то связано с моей схемой? new mongoose.Schema({ period: Number, availabilities: [] })

2. Извините, я неправильно написал код. Я только что изменил, ты можешь попробовать еще раз.