У меня есть такая коллекция пользователей...
{
"_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?
Заранее спасибо.
@MarkBramnik я имею в виду ... когда я вставляю нового пользователя, я просто знаю пользователя, так что ... что-то вроде этого db.users.insert({ "userName": "Batman", "code": ???? // funciton или оператор })
Вы можете рассчитать новый код с помощью агрегации и впоследствии вставить новый документ:
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"
]
}
}
}
}
])
Очень интересно, вроде работает. Возможно, если я добавлю свойство «UNIQUE» и снова вызову эту функцию, если я получу повторяющуюся ошибку, я смогу решить эту проблему. Теперь мне нужно проверить, как он ведет себя с тысячами пользователей, надеюсь, это будет быстро.
И какой userName нужно дать документу с отсутствующим кодом? Как Mongo может обнаружить это?