MongoDB DBRefs возвращает ноль - PullRequest
0 голосов
/ 04 мая 2020

Я все еще изучаю MongoDB, и я только что достиг DBRefs. У меня было две базы данных под названием «Студенты» и «Учебник». База данных «Студенты» содержит коллекцию с именем «Студенты», а база данных «Учебник» содержит 3 коллекции с именами «Сотрудник», «Адрес» и «Телефон».

Я использовал «Отношения ссылок на сотрудника, адрес» и Коллекции телефона, но сохраняющие значения Адреса и Телефона в Сотруднике, и он показывает правильные результаты, когда я пытаюсь вывести Адрес некоторого Сотрудника. Затем я использовал DBRef между Сотрудником и Студентами только для обучения и эксперимента. Ничего серьезного здесь нет.

В любом случае, когда я пытался сохранить запись Стьюдента в Employee, используя запросы, показанные на изображениях ниже, он выдает мне «Null» в качестве вывода при попытке вывести Student.

1) Вставка записи в Сотрудника с DBRef для ученика
2) Результаты

Редактировать: Согласно этому ответу Связанные отношения MongoDB против DBRef , это был мой предыдущий вопрос, связанный с DBRefs, кстати, человек, который вкратце ответил на мой вопрос, сказал, что я могу использовать DBRefs для работы между различными базами данных в MongoDB.

Прав ли он или нет?
Я думаю, что он ошибался, потому что то, что я сделал выше, привело к нулевому значению. Я только что выполнил DBRef, оставаясь в той же базе данных, и на этот раз он дал мне правильный результат.

Итак, с DBrefs вы не можете работать вне базы данных, в которой находитесь, а только внутри нее.

Итак, я повторяю свой старый вопрос еще раз ... Зачем использовать DBRef, которые имеют запутанный и трудоемкий синтаксис, когда я могу просто использовать ссылочные отношения, которые имеют более простой и менее трудоемкий синтаксис по сравнению с DBRef ???

1 Ответ

0 голосов
/ 04 мая 2020

Основным преимуществом DBRef является то, что он хранится в базе данных как отдельный тип данных.

Это позволяет клиенту, например Mon goose заполнить , автоматически и прозрачно извлекать ссылочные документы для вас.

DBRef в понедельник Оболочка go является объектом, для извлечения полей вы можете использовать методы чтения getCollection, getDb и getId, но это обычно не требуется.

Чтобы получить ссылочный документ, используйте fetch, например

Emp.Protege.fetch()

Не все драйверы поддерживают DBRefs .

Если вы будете использовать драйвер, который поддерживает DBRef, вы можете найти их полезными.

Если вы планируете писать запросы на связывание и самостоятельно получать связанные документы, вероятно, было бы проще хранить ссылочный _id в обычном поле.

...