'How to fill the missing code number with a new document, sequence Mongodb
I have an users collection like this...
{
"_id": "614443e922b33330542a2645",
"userName": "John",
"code": 1,
},
{
"_id": "614443e922b33330542a2646",
"userName": "Adam",
"code": 2,
},
{
"_id": "614443e922b33330542a2647",
"userName": "Lily",
"code": 3,
},
{
"_id": "614443e922b33330542a2649",
"userName": "Brad",
"code": 5,
}
In this collection, the document with code 4 was deleted... Now i would like to create a new document and fill the sequence. Is there any function or operator that will detect the missing code and create it with code 4?
Thanks in advance.
Solution 1:[1]
You can calculate the new code with an aggregation and insert the new document afterwards:
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"
]
}
}
}
}
])
- Group all codes in an array with $push and find max & min
- Calculate the difference between the array and auto-generated array based on max and min and get the min value available for the new document to be inserted. Please, note that if your application is multithreaded if you execute at the same time this code it will provide the same result so you may think about some concurrency mechanism here or chosing random code from list of available ...
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
