MongoDB - DBRef для DBObject - PullRequest
       13

MongoDB - DBRef для DBObject

0 голосов
/ 20 августа 2011

Использование Java ... не то чтобы это имело значение.

Возникла проблема, и, возможно, это просто проблема дизайна.

Я назначаю поле "_id" всем своим документам, дажевстроенные.У меня есть родительский документ (и коллекция для тех), который имеет встроенный документ

Так что у меня есть что-то вроде:

{ "_id" : "49902cde5162504500b45c2c" , 
  "name" : "MongoDB" , 
  "type" : "database" , 
  "count" : 1 , 
  "info" : { "_id" : "49902cde5162504500b45c2y", 
             "x" : 203 , 
             "y" : 102
           }
}

Теперь я хочу иметь другой документ, который ссылается на мою "информацию"через DBRef, не хочу копировать.Итак, я создаю DBRef, который указывает на коллекцию родительского документа и указывает _id как xxxx5c2y.Однако, вызов fetch() на DBRef дает NULL.

Означает ли это, что DBRef и fetch() работают только с полями "_id" записи коллекции верхнего уровня?

Я бы ожидал, что fetch() будет использовать все ключи: значения в фигурных скобках документа ... но, возможно, это требует слишком много.Кто-нибудь знает??Нет ли способа создать перекрестные ссылки на документы, кроме как на верхнем уровне?

Спасибо

1 Ответ

1 голос
/ 20 августа 2011

Да, ваши ссылки DBRef _id должны быть на документы в вашей коллекции, а не на внедренные документы.

Если вы хотите найти встроенный документ, вам нужно будет выполнить запрос к info._id, и вам нужно будет добавить индекс по нему (для повышения производительности) ИЛИ вам нужно будет сохранить этот встроенный документ в коллекция и рассматривать встроенный как копию. Копирование в MongoDB - это нормально ... «один факт - одно место» здесь не применимо ... при условии, что у вас есть какой-то способ обновить копию при изменении основной (возможная согласованность).

Кстати, в DBRef официальное руководство гласит: «Большинство разработчиков используют DBRef только в том случае, если коллекция может переходить с одного документа на другой. Если ваша ссылочная коллекция всегда будет одинаковой, ссылки, приведенные выше, более эффективны».

Кроме того, почему вы хотите сослаться на info в документе? Если бы это был массив, я мог бы понять, почему вы можете ссылаться на отдельные записи, но поскольку в вашем примере это не массив, почему бы просто не ссылаться на содержащий документ по его _id?

...