Как сохранить последние 1000 документов и удалить остальные в запросе MongoDB? - PullRequest
0 голосов
/ 05 мая 2020

Привет всем, у меня есть коллекция mon go с названиями продуктов, которые я выделил отдельно от продуктов, используя db.getCollection('products').distinct("product.name") - это дает мне отличное название продукта

Но я хочу удалить старые документы для этого отдельного продукта и сохранить только последние 1000 документов

Как написать запрос remove () для этого условия.

Ответы [ 3 ]

0 голосов
/ 05 мая 2020

Здесь я создал запрос, чтобы получить последние 1000 различных product.name

Я отсортировал _id, чтобы получить последние документы.

пожалуйста, посмотрите:

db.sample.aggregate([
  {
    $sort:{
      "_id":-1
    }
  },
  {
    $group:{
      "_id":"$product.name",
      "date":{
        $first:"$date"
      },
      "id":{
        $first:"$_id"
      },
      "product":{
        $first:{
          "name":"$product.name",
          "quantity":"$product.quantity"
        }
      }
    }
  },
  {
    $project:{
      "_id":0,
      "_id":"$id",
      "date":1,
      "product":1
    }
  },
  {
    $limit:1000
  },
  {
    $out:"collection_name"
  }
])

Этот запрос будет извлекать самые последние документы (отдельные), а вывод будет записан в новую коллекцию collection_name

Я использовал $out для этого.

ПРИМЕЧАНИЕ

Обращайтесь с $out осторожно, потому что он перезапишет коллекцию.

Подробнее о $out см. здесь .

Надеюсь, это поможет :)

0 голосов
/ 05 мая 2020

Будет ли это работать db.collection.remove ({"product.name": "apple"}). Skip (1000)

0 голосов
/ 05 мая 2020

Один вариант: скопируйте необходимые / отфильтрованные 1000 записей во временную коллекцию и отбросьте исходную коллекцию, затем переименуйте временную коллекцию в исходную коллекцию и воссоздайте любые свойства коллекции, такие как индексы и т. Д. c. hth.

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