Mongoose: документы, встроенные в объект с произвольными ключами?

Созданный на 12 янв. 2012  ·  40Комментарии  ·  Источник: Automattic/mongoose

Есть ли способ использовать встроенные документы в объекте, который не имеет предопределенных ключей? т.е. вместо такой ситуации:

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

Возможность сказать что-то вроде:

var myschema = new mongoose.Schema({
   field : { *: String }
});

Это делает его немного более массивным, как в этом случае, но идея в том, что я не знаю ключей заранее, но я все же хотел бы иметь встроенный документ.

enhancement

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

Эта функция ОБЯЗАТЕЛЬНА.

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

нет.

Как насчет типа Mixed ?

@aheckmann - это то, чего я боялся, знаете ли вы, есть ли это в дорожной карте или это просто то, что широко не нужно?

@TooTallNate - верно, это значение по умолчанию. Проблема в том, что со смешанными вы теряете все материалы проверки/схемы, которые вы получаете с поддерживаемыми (именованными ключами и массивами) встроенными документами.

@ordrin это никому не было нужно

Хорошо, не понимал, что делаю что-то настолько эзотерическое! Проклятие.

У меня есть вариант использования для этого, по крайней мере, я считаю, что это актуально.

Я делаю систему ACL.

Мои задачи имеют _ids, которые являются строками.

Я хочу встроить эти идентификаторы в записи членов моего члена (массив задач, которые они могут выполнять).

Хотя я, конечно, могу просто поместить массив строк в их свойство «tasks», в идеале я хотел бы использовать DBrefs в этом сценарии, чтобы я мог получать метаданные.

@ordrin Я только что перечитал это. Вы смотрели на использование Mixed? Возможно, я неправильно понял, что b/ci думают о «встроенных документах» иначе, чем о том, как к ним относится MongoDB. Вот что вы можете сделать с Mixed.

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

Это довольно близко к тому, что вы просили. В этом случае «поле» может быть присвоено любому значению. Вы можете просто назначить ему литерал объекта и добавить настраиваемый валидатор, чтобы значения были строками.

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

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

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1.

Я разместил сообщение SO по этой проблеме. Если кто-нибудь знает хороший способ проверки свойства с динамическими ключами, не стесняйтесь публиковать.

Если бы он был встроен, я мог бы создать схему, например

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

Было бы здорово иметь динамические клавиши. Если вы хотите написать json-схему , вы можете сделать что-то вроде, например, для соответствия целочисленному ключу:

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

любое решение с динамическими ключами или все еще нет?
Пример 2 объектов:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

Та же проблема. Я хочу делать аналитику, как описано в документации mongodb. http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Я нуждался в этом хорошо

+1

Остановите эти бессмысленные +1, которые заканчиваются просмотром почтовых ящиков людей.

Кнопки "Подписаться" и "Реакция" есть не просто так.

+1

@qqilihq , реализуйте plx, тогда мы остановим +1, kthxbye

"никто раньше не нуждался"
5 лет спустя, тонна +1 спустя, до сих пор нет обновлений по этому поводу?

Поскольку это самая старая проблема, связанная с этой, которую я могу найти, я снова открою ее и закрою #1522, чтобы как можно больше людей могли отслеживать обновления.

Эта функция ОБЯЗАТЕЛЬНА.

Как эта функция была выпущена так тихо, что я не знал об этом?! 💯

@adamreisnz, лол, спасибо. Где вы ищете обновления функций Mongoose? Список изменений? Твиттер?

Список изменений обычно, но, должно быть, пропустил этот!

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