Исключение элемента массива имеет значение c - PullRequest
0 голосов
/ 04 марта 2020

У меня есть схема с массивом внутри, и я хочу выбрать элемент, но исключаю некоторые элементы массива, которые имеют конкретное значение c.

Образец данных:

{
  _id: 1,
  name: something,
  department: management,
  employees: [
    0: { 
      _id: 1,
      name: joe,
      suspended: false
    },
    1: {
      _id: 2,
      name: clare,
      suspended: false
    },
    2: {
      _id: 3,
      name: michelle,
      suspended: true
    }

  ]
}

Мне нужно исключить Клэр и Джо, а все остальные имеют suspended:false из результата. (Мне нужно, чтобы отдел и его сотрудники были временно отстранены от работы)

Вот код, который я пробовал, но он не работал ... Этот код исключает только поле "приостановлено". Не элементы массива.

Department.findOne(
    { name:req.params.department},
    { 'employees.suspended': false }
    , function(err, result){
        if(err) {
            console.log("ERROR");
            console.log(err);
        } else {
            console.log("RESULT");
            console.log(result);
        }
    })

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы можете сделать это с помощью инфраструктуры агрегации MongoDB

Department.aggregate([
  {
    $match: {
      name: req.params.department
    }
  },
  {
    $addFields: {
      employees: {
        $filter: {
          input: "$employees",
          cond: {
            $ne: [
              "$$this.suspended",
              false
            ]
          }
        }
      }
    }
  }
]).exec(err, result){
    if(err) {
        console.log("ERROR");
        console.log(err);
    } else {
        console.log("RESULT");
        console.log(result);
    }
})

MongoPlayground

0 голосов
/ 04 марта 2020

Попробуйте это:

db.collection.aggregate([
   { $match: { name: req.params.department } },
   {
      $set: {
         employees: {
            $filter: {
               input: "$employees",
               cond: "$$this.suspended"
            }
         }
      }
   }
])

Пн go детская площадка

...