Интеграция ObjectId MongoDB в мою структуру - PullRequest
0 голосов
/ 20 февраля 2019

Я пишу среду JavaScript, которая использует MongoDB в качестве драйвера базы данных.MongoDB - не единственный драйвер, и платформа специально не предназначена для работы только с MongoDB.Назначение драйвера в рамках платформы - преобразовать вызовы базы данных платформы в (в данном случае) вызовы драйвера MongoDB.

Пока все хорошо.Проблемы начинают возникать, когда я взаимодействую с полями _id, которые используют ObjectIds как для первичного ключа, так и для ссылок на другие коллекции.

Основная проблема, с которой я сталкиваюсь в настоящий момент, заключается в том, что если я использую список идентификаторов вскажем, выбрать элемент DOM в моем интерфейсе, я должен преобразовать ObjectID в строки.Но когда я сохраняю документ, который ссылается на документ другой коллекции в одном из ее полей, мне нужно преобразовать строку обратно в ObjectID.

Это не так уж и важно для реализации в моем драйвере (ищите значениятипа String, ключ которого оканчивается на _id), но он действительно начинает плохо работать со встроенными документами или с полем массива, содержащим список ObjectIds.Выполнение обычных операций .include или .filter для этого массива в рамках не возможно, пока я не сопоставлю массив со строками.А поскольку документы можно встраивать бесконечно, я вижу, что это только усложняет процесс разработки более сложных приложений.

Одна вещь, о которой я подумал, - это отказаться от использования нативного механизма _id в MongoDB и реализовать мойсвое уникальное поле для документов, но это кажется мне расточительным и не очень эффективным.

Есть ли хороший способ обойти это?

1 Ответ

0 голосов
/ 20 февраля 2019

У нас была такая же проблема.Вместо этого мы использовали строки UUID, это было намного проще.Хотя с драйвером Node.js, который мы использовали для преобразования преобразованных ObjectID в строки, он возвращался от внешнего интерфейса к заднему, нам нужен был небольшой фрагмент:

Отказ от ответственности: это из памяти, а неточный

function someRequest(id, ...)
try {
  var oid = new ObjectID(id);
  if (!oid.isValid()) {
    throw new Error("Not an object ID");
  }
} catch (e) {
  console.error(e);
  var oid = id;
}

Но работал еще лучше, просто создавая UUID-строки для идентификаторов, у нас никогда не было проблем с производительностью ~ 100 одновременно работающих пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...