удаление мангуста из массива

#node.js #mongoose

#node.js #мангуст

Вопрос:

Мне нужно удалить идентификатор пользователя из всех объектов в коллекции, кроме того, который был передан, в моем примере это значение: ‘Тата’, подскажите, как сделать такой запрос?

введите описание изображения здесь

console.log(результат)

 [
 {
    _id: 5fa702b2f18e5723b4c00d9f,
    value: 'Тата',
    vote: { '36e7da32-f818-4771-bb5e-1807b2954b5f': [Array] },
    date: 2020-11-07T20:25:22.611Z,
    __v: 0
  }
]
  

console.log(req.body)

 { value: 'Тата', habalkaId: '36e7da32-f818-4771-bb5e-1807b2954b5f' }
  

console.log(req.user._id)

 5f63a251f17f1f38bc92bdab
  

это все, что я мог сделать, просто найти

 router.post('/', passport.authenticate('jwt', {session: false}), (req, res) => {
   FirstName.find({value: req.body.value})
    .then(result => {
      if (result.length) {
        console.log(result)
        console.log(req.body)
        console.log(req.user._id)
        FirstName.find({value: {$ne: 'Слоник'}}, function (err, arr) {
            arr.map(e => {
              if (e.vote[req.body.habalkaId].length) {
                if(e.vote[req.body.habalkaId].includes(String(req.user._id))){
                  console.log(e.vote[req.body.habalkaId])
                }
              }
            })

        })

      } else {
        new FirstName({
          value: req.body.value,
          vote: {[req.body.habalkaId]: [String(req.user._id)]}
        }).save();
      }
    })

  // res.json({res: req.body})
})
  

FirstName.js

 const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const FirstNameSchema = new Schema({
  value: {
    type: String
  },
  vote: {
    type: Object
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = FirstName = mongoose.model('firstname', FirstNameSchema);
  

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

1. Не могли бы вы опубликовать пример своей коллекции, пожалуйста?

2. добавлено, посмотрите в конце вопроса

Ответ №1:

Если я правильно понял, вы хотите что-то вроде этого:

 db.collection.update({
  "value": {
    "$ne": "tata"
  }
},
{
  "$pull": {
    "vote.array_name": "id_value"
  }
},
{
  multi: true
})
  

Прежде всего, найдите все документы, которые не совпадают value с заданным. Затем для каждого найденного документа удалите объект из массива, используя $pull , где id заданные совпадения.

Пример здесь

Пожалуйста, проверьте поле оплаты и проверьте, правильно ли я использовал схему, и она показывает ожидаемый результат.

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

1. «array_name»: [ { 0: «id_value» } ] это не массив объектов, а просто массив, который показывает компас, так что [ ‘5f63a251f17f1f38bc92bdab’ ] вот как это выглядит на самом деле

2. я пробую это FirstName.update({ «value»: { «$ ne»: «Тата» } }, { «$pull»: { «vote.36e7da32-f818-4771-bb5e-1807b2954b5f»: запрос пользователя. _id } }, { multi: true }), но не работают

3. хорошо, я нашел свою ошибку, FirstName.update({ «value»: { «$ne»: «Тата» } }, { «$pull»: { «vote.36e7da32-f818-4771-bb5e-1807b2954b5f»: Строка(req.user._id) } }, {multi: true }) вставьте его, пожалуйста, вместо вашего кода

4. Это правда, извините! Это compass результат. Я обновил ответ.