MongoDB - DBRef для DBObject

Использование 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 ответ

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

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

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

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

Другие вопросы по тегам