У меня есть проблема и решение путем создания дельт и обновления БД, но, может быть, у кого-то есть другое решение, более удобное? Все время, когда я обновляю или создаю элемент, я должен пересчитывать поле place
.
Есть коллекция posts
:
{pid: '1'}
{pid: '2'}
{pid: '3'}
{pid: '4'}
Я обновляю эту коллекцию и добавляю новое поле:
{pid: '1'}
{pid: '2', place: 3}
{pid: '3'}
{pid: '4'}
И еще один раз
{pid: '1'}
{pid: '2', place: 3}
{pid: '3'}
{pid: '4', place: 5}
Если, если вы делаете это по строке, например, поместите место: 1 после места: 2 ... Это прекрасно работает, и когда я обновлюсь, или так будет работать хорошо но если я делаю это случайно, у меня возникает проблема вроде:
Я хочу в коллекции выше, обновить pid: 3 и поставить место: 1 я получу
{pid: '3', place: 1}
{pid: '1'}
{pid: '2', place: 4}
{pid: '4', place: 6}
место 3 -> место 4 и место 5 -> место 6. Я использую $ in c и $ gte / $ lte относительно условий. Один из запросов:
const recahnage = await modelPost.updateMany(
{
place: {
$gte: place
},
categories: {
$in: categories
}
},
{
$inc: {
place: 1
}
})
В этой ситуации мне не нужно увеличивать место: 3 и место: 5, потому что место: 2 не существует. Я хочу прекратить увеличиваться, если место не существует.
У кого-нибудь есть идеи? Я не хочу делать дельту и сразу ставить place
поля во всех предметах.