Проверка Mongodb и добавление ссылочного значения

У меня две коллекции.

checkone
{"_id":1,"name":"alex"},
{"_id":2,"name":"sandy"}

checktwo
{"_id":11,"password":"alex",tenant_id:{$ref:"checkone","$id":1}}
{"_id":12,"password":"suman",tenant_id:{$ref:"checkone","$id":2}}

Checktwo tenant_id, ссылающийся на значение идентификатора checkone.

Но когда я пытаюсь вставить еще один документ в checktwo

 {"_id":13,"password":"shan",tenant_id:{$ref:"checkone","$id":6}}

Его вставляют. Он не проверяет, существует ли значение tenant_id 6 в значении идентификатора checkone, и не добавляет его. В этом состоянии значение id 6 не существует в checkone, но оно вставляется в значение checktwo tenant_id.

Собственно его надо проверить и правильно вставить?

Я не понимаю, что здесь означает $ ref?

недоступна ли эта функциональность в mongodb? Может ли кто-нибудь направить меня, если я ошибаюсь.


person Ramya    schedule 05.09.2012    source источник


Ответы (1)


Я думаю, вы допустили классическую ошибку с MongoDB, думая, что у него есть какие-то реляционные способности, какие-то вообще.

DBRef не имеет отношения и не поддерживается на стороне сервера ни в чем. Он не рассматривается как неотъемлемый внешний ключ или ограничение для подключения к другим таблицам.

Это просто возможность на стороне драйвера иметь самоописывающийся идентификатор с нормализованным способом ленивого извлечения этой другой строки с помощью такой функции, как getConnected().

Функция JOINs и ограничений не существует в MongoDB, вы должны вручную на своей стороне в вашем клиентском коде проверить наличие 6s.

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

person Sammaye    schedule 05.09.2012
comment
Могу ли я узнать цель getConnected? Вы можете опубликовать мне несколько ссылок на него? - person Ramya; 05.09.2012
comment
@Ruben Это был просто пример, но вот документ для Java: api .mongodb.org / java / current / com / mongodb / DBRef.html, а функция getConnected() на самом деле fetch в вашем API, я думаю. - person Sammaye; 05.09.2012