Я проверил API http://mongoosejs.com/docs/populate.html и попробовал. Кажется, что populate
может работать только на иностранных _id
. Даже есть опция match
, она просто добавляет дополнительные условия фильтрации к условию запроса _id
. Невозможно просто заполнить поля, не связанные с _id
.
В моем проекте мы сохраняем _id
качестве ObjectId и имеем еще одно поле в качестве числа с автоинкрементом. Например, модель customers
имеет _id
качестве объекта и cuid
качестве возрастающего числа. Другие коллекции просто ссылаются на cuid
не на _id
.
Было бы здорово иметь возможность настроить это?
Есть ли какие-либо конструктивные ограничения, из-за которых эта функция отсутствует?
Было бы здорово иметь возможность настроить это, но сейчас мы применяем _id
. Я не могу придумать вескую причину, почему бы и нет. Я должен буду исследовать дальше.
Возможность заполнения не только одного другого поля, но даже набора полей почти необходима для правильной поддержки сегментирования, что является для нас огромным вариантом использования.
Например, у нас есть коллекция «студенты», которая может иметь ключ сегмента для «подписки»; когда мы заполняем данные о студентах из нашей модели разделов (которая содержит массив студентов), у нас есть подписка на документ, но он будет искать только на основе _id, хранящегося в «студенте», а не позволяет нам указать, что он также должен отображать в документах поле «задание» в поле «задание» на студента.
Поскольку тогда при заполнении мы будем выполнять поиск без ключа сегмента, это делает сегментирование бесполезным, требуя, чтобы для извлечения данных были задействованы все сегменты, а не только один.
Это то, для чего мы были бы готовы финансировать разработку или даже сделать это сами, если бы могли получить рекомендации о том, где выполнять работу. Это основная потребность нашей компании (GradeCam).
@taxilian , вы устанавливаете параметр схемы shardKey
? AFAIK, для чего этот вариант.
На самом деле я еще не начал это делать, потому что искал решение этой проблемы; учитывает ли при заполнении shardKey? Я так понимаю, что shardKey влияет только на обновления и вставки
Было бы здорово иметь возможность указать поле, которое должно быть «присоединено», например, я хотел бы иметь возможность заполнять не только поле userId (т.е. _id), но также и userType, userGroup и т. д.
Спасибо!
+1
+1 было бы очень полезно
+1 здесь же!
+1 люблю это
+1
+1
+1
Было бы особенно приятно иметь возможность выбрать переменную, которую вы хотите заполнить, добавив такой параметр, как key
:
Например, если бы у меня были сообщения, для которых я хотел заполнить параметры author
и comments
, но параметры содержат параметры, отличные от ObjectId (имя пользователя и название комментариев) перед заполнением:
{
author: "user1",
comments:["comment5", "comment6"],
title:"Post1"
}
Было бы неплохо иметь возможность добавить такой параметр, как «ключ», чтобы монго знал, какой параметр искать:
Posts.find().populate([{path:"author", model:"Users", key:"username"}, {path:"comments", model:"Comments", key:"title"}])
Это заполнит параметр author
пользователем, найденным по имени пользователя, а также заполнит параметр comments
комментариями, найденными по их заголовку (я понимаю, что комментарии по заголовку немного нереалистичны, но вы получаете смысл).
+1
+1
+1
+1
+1
+1
+1
Большой согласен. Мне бы хотелось иметь возможность определять пользовательские схемы населения. Это было бы здорово для любой схемы с одним или несколькими полями, которые являются путями к файлам, позволяя заполнять данные для чтения из хранилища.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
Попробуйте этот код: https://github.com/alexmingoia/mongoose-populate-virtuals.
На самом деле, есть ли причина не объединять код Алекса с основным репо и не делать его основной функцией?
@rturk Мне действительно очень нравится этот плагин, спасибо, что указали на него. @alexmingoia, что вы думаете о слиянии вашего модуля с ядром мангуста? Идея использования виртуалов для обработки более общего заполнения (без сохранения фактического поля в базе данных) действительно эффективна.
Это было бы идеально. В ядре было бы намного лучше, потому что он перегружает Query.prototype.populate
и другие основные функции.
Единственное, что мешает мне создать запрос на вытягивание, это то, что тестового покрытия практически нет, а документации не хватает. Я использую его в производстве в нескольких сценариях, и он стабилен, но я думаю, что если бы кто-то написал набор тестов, он мог бы выявить некоторые незначительные проблемы или особенности, которые необходимо задокументировать.
Кто-нибудь готов взяться за набор тестов? Если нет - я могу это сделать, но не ожидайте, что это произойдет раньше следующего месяца.
Я взгляну. Я был смысл переписать Заполнить все равно :)
Отправьте мне запрос на IRC (freenode, amingoia
) или gitter, если у вас есть вопросы по коду.
https://github.com/whitecolor/mongoose-fill также отлично справляется с заполнением с использованием данных из других моделей.
+1
+1
+1
это обязательно :)
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+1
Самый полезный комментарий
@rturk Мне действительно очень нравится этот плагин, спасибо, что указали на него. @alexmingoia, что вы думаете о слиянии вашего модуля с ядром мангуста? Идея использования виртуалов для обработки более общего заполнения (без сохранения фактического поля в базе данных) действительно эффективна.