Mongoose: Можно ли заполнить без `_id`?

Созданный на 26 дек. 2014  ·  82Комментарии  ·  Источник: Automattic/mongoose

Я проверил API http://mongoosejs.com/docs/populate.html и попробовал. Кажется, что populate может работать только на иностранных _id . Даже есть опция match , она просто добавляет дополнительные условия фильтрации к условию запроса _id . Невозможно просто заполнить поля, не связанные с _id .

В моем проекте мы сохраняем _id качестве ObjectId и имеем еще одно поле в качестве числа с автоинкрементом. Например, модель customers имеет _id качестве объекта и cuid качестве возрастающего числа. Другие коллекции просто ссылаются на cuid не на _id .

Было бы здорово иметь возможность настроить это?
Есть ли какие-либо конструктивные ограничения, из-за которых эта функция отсутствует?

enhancement

Самый полезный комментарий

@rturk Мне действительно очень нравится этот плагин, спасибо, что указали на него. @alexmingoia, что вы думаете о слиянии вашего модуля с ядром мангуста? Идея использования виртуалов для обработки более общего заполнения (без сохранения фактического поля в базе данных) действительно эффективна.

Все 82 Комментарий

Было бы здорово иметь возможность настроить это, но сейчас мы применяем _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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги