передача байтов от одного ByteBuffer до другого

Необходимо создать составной индекс или составной первичный ключ , который включает поля id_user и start_date. Это обеспечит невозможность создания документов для одного и того же пользователя с одинаковой датой, и база данных выдаст ошибку, если вы попытаетесь это сделать. Составной индекс с мангустом

Вы также можете использовать транзакций . Для этого необходимо выполнить методы find и create внутри транзакции, чтобы гарантировать, что никакие параллельные запросы к одному и тому же документу не будут выполнены. Учебное пособие по транзакциям Mongoose

Дополнительная информация

Я хотел бы воспользоваться уникальным составным индексом, который в вашем конкретном случае должен выглядеть примерно так

mySchema.index({user_id: 1, start_date: 1}, {unique: true});

5
задан Jason S 20 February 2009 в 17:11
поделиться

2 ответа

Хорошо, я адаптировал ответ @Richard:

public static int transferAsMuchAsPossible(
                     ByteBuffer bbuf_dest, ByteBuffer bbuf_src)
{
  int nTransfer = Math.min(bbuf_dest.remaining(), bbuf_src.remaining());
  if (nTransfer > 0)
  {
    bbuf_dest.put(bbuf_src.array(), 
                  bbuf_src.arrayOffset()+bbuf_src.position(), 
                  nTransfer);
    bbuf_src.position(bbuf_src.position()+nTransfer);
  }
  return nTransfer;
}

и тест для проверки это работает:

public static boolean transferTest()
{
    ByteBuffer bb1 = ByteBuffer.allocate(256);
    ByteBuffer bb2 = ByteBuffer.allocate(50);
    for (int i = 0; i < 100; ++i)
    {
        bb1.put((byte)i);
    }
    bb1.flip();
    bb1.position(5);
    ByteBuffer bb1a = bb1.slice();
    bb1a.position(2);
    // bb3 includes the 5-100 range
    bb2.put((byte)77);
    // something to see this works when bb2 isn't empty
    int n = transferAsMuchAsPossible(bb2, bb1a);
    boolean itWorked = (n == 49);

    if (bb1a.position() != 51)
        itWorked = false;
    if (bb2.position() != 50)
        itWorked = false;
    bb2.rewind();
    if (bb2.get() != 77)
        itWorked = false;
    for (int i = 0; i < 49; ++i)
    {
        if (bb2.get() != i+7)
        {
            itWorked = false;
            break;
        }
    }
    return itWorked;
}
3
ответ дан 18 December 2019 в 14:52
поделиться

Вы получаете BufferOverflowException, потому что Ваш bbuf_dest не является достаточно большим.

Необходимо будет использовать bbuf_dest.remaining () для обнаружения максимального количества байтов, которые можно передать от bbuf_src:

int maxTransfer = Math.min(bbuf_dest.remaining(), bbuf_src.remaining());
bbuf_dest.put(bbuf_src.array(), 0, maxTransfer);
1
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: