Есть ли способ использовать встроенные документы в объекте, который не имеет предопределенных ключей? т.е. вместо такой ситуации:
var myschema = new mongoose.Schema({
field : { foo: String, bar: String }
});
Возможность сказать что-то вроде:
var myschema = new mongoose.Schema({
field : { *: String }
});
Это делает его немного более массивным, как в этом случае, но идея в том, что я не знаю ключей заранее, но я все же хотел бы иметь встроенный документ.
нет.
Как насчет типа 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();
Я просто хотел добавить, что искал функциональность, подобную этой. Я хотел иметь динамические ключи со строго типизированными значениями схемы. Было бы здорово, если бы мы могли избежать ручной проверки.
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? Список изменений? Твиттер?
Список изменений обычно, но, должно быть, пропустил этот!
Самый полезный комментарий
Эта функция ОБЯЗАТЕЛЬНА.