как удалить много документов из коллекции на основе условия со значениями из другой коллекции - PullRequest
0 голосов
/ 13 апреля 2020

здесь прикреплен агрегатный запрос, я хочу удалить все возвращаемые значения этого запроса из той же коллекции «История», как это сделать?

enter image description here

Допустим, я иметь коллекцию записей компаний фондового рынка с именем «history» как

{_id:"value",symbol:"value",date:"value",open:"value",close:"value",......}

в моем файле должен быть документ для каждой компании на каждый день, всего 42 дня записей для каждой компании, но после проверки Похоже, что в некоторых компаниях нет всех 42-дневных записей «на один документ / день», которых у них меньше, поэтому я хочу удалить компании, у которых нет ровно 42 документов, по которым моя группа будет на «символе» моего счета на "дату" я могу получить список, но я не знаю, как его удалить

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете удалить их, используя метод .remove.

db.history.aggregate(...).forEach(function(doc){
    db.history.remove({symbol: doc._id});
})

Примечание: Это очень медленно.

Альтернативное решение: Изменить критерии агрегирования для возврата действительных документов и переопределения коллекции history с помощью оператора $ out :

db.history.aggregate([
  {
    $group: {
      _id: "$symbol",
      nbr_jours: {
        $sum: 1
      },
      data: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $match: {
      nbr_jours: {
        $gte: 42 //$eq
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  },
  {
    $out: "history"
  }
])

Примечание: Это очень быстро.

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