Как заполнить недостающий кодовый номер новым документом, последовательность Mongodb

У меня есть такая коллекция пользователей...

{
  "_id": "614443e922b33330542a2645",
  "userName": "John",
  "code": 1,
},
{
  "_id": "614443e922b33330542a2646",
  "userName": "Adam",
  "code": 2,
},
{
  "_id": "614443e922b33330542a2647",
  "userName": "Lily",
  "code": 3,
},
{
  "_id": "614443e922b33330542a2649",
  "userName": "Brad",
  "code": 5,
}

В этой коллекции был удален документ с кодом 4... Теперь я хотел бы создать новый документ и заполнить последовательность. Есть ли какая-нибудь функция или оператор, который обнаружит недостающий код и создаст его с кодом 4?

Заранее спасибо.

И какой userName нужно дать документу с отсутствующим кодом? Как Mongo может обнаружить это?

Mark Bramnik 19.03.2022 15:38

@MarkBramnik я имею в виду ... когда я вставляю нового пользователя, я просто знаю пользователя, так что ... что-то вроде этого db.users.insert({ "userName": "Batman", "code": ???? // funciton или оператор })

Sergio Cano 19.03.2022 15:50
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
2
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете рассчитать новый код с помощью агрегации и впоследствии вставить новый документ:

db.collection.aggregate([
{
 $group: {
  _id: "Test",
  arr: {
    $push: "$code"
  },
  ma: {
    $max: "$code"
  },
  mi: {
    $min: "$code"
   }
  }
  },
  {
   $project: {
    _id: 0,
    code: {
      $min: {
      "$setDifference": [
        {
          $range: [
            "$mi",
            "$ma",
            1
          ]
        },
        "$arr"
      ]
     }
    }
   }
  }
])
  1. Сгруппируйте все коды в массив с помощью $push и найдите максимум и минимум
  2. Вычислите разницу между массивом и автоматически сгенерированным массивом на основе максимального и минимального значений и получите минимальное значение, доступное для вставляемого нового документа. Пожалуйста, обратите внимание, что если ваше приложение является многопоточным, если вы одновременно выполняете этот код, он даст тот же результат, поэтому вы можете подумать о каком-то механизме параллелизма здесь или выбрать случайный код из списка доступных...

детская площадка

Очень интересно, вроде работает. Возможно, если я добавлю свойство «UNIQUE» и снова вызову эту функцию, если я получу повторяющуюся ошибку, я смогу решить эту проблему. Теперь мне нужно проверить, как он ведет себя с тысячами пользователей, надеюсь, это будет быстро.

Sergio Cano 19.03.2022 17:28

Другие вопросы по теме