У меня есть коллекция обновлений хранилища. Это предопределенная коллекция «шаблонов», содержащая, например, max_capacity, уровень и цену. Затем у меня есть коллекция storage_levels, которая содержит разные индексы для хранилища_пакетов для разных хранимых ресурсов. Но я не могу создать warehouse_level модель, потому что мне нужно загрузить _ids из warehouse_upgradesЗначение по умолчанию Mongoose Schema для ObjectId
WarehouseUpgrade = mongoose.model("warehouse_upgrade");
// find wheat upgrade containing level 0
WarehouseUpgrade.find({ type: "wheat", level: 0 }).exec(function (err, wheat) {
var warehouseLevelSchema = Schema({
wheat: {
type: Schema.Types.ObjectId,
ref: "warehouse_upgrade",
default: wheat._id
},
... more resources
};
var WarehouseLevel = mongoose.model("warehouse_level", warehouseLevelSchema);
}
Когда я хочу позвонить вар WarehouseLevel = mongoose.model («warehouse_level»); интерпретируя этот код бросает ошибку:
MissingSchemaError: Schema hasn't been registered for model "warehouse_level"
Если извлечь из определения схемы из WarehouseUpgrade.find, то код работает, но я не могу установить значения по умолчанию для хранилищ ресурсов.
Как установить значение по умолчанию для ObjectId из другой коллекции, когда я не хочу жестко задавать эти значения?
EDIT: загружает все определения схемы в файл с именем mongoose.js:
var mongoose = require("mongoose"),
Animal = require("../models/Animal");
Warehouse_upgrade = require("../models/Warehouse_upgrade"),
Warehouse_level = require("../models/Warehouse_level"),
User = require("../models/User"),
...
module.exports = function(config) {
mongoose.connect(config.db);
var db = mongoose.connection;
// And now I call methods for creating my "templates"
Warehouse_upgrade.createUpgrades();
Animal.createAnimals();
User.createDefaultUser();
}
MissingSchemaError происходит в модели/пользователь (имя пользователя, hashed_password, электронная почта, warehouse_level, ...) - у каждого пользователя есть ссылка к его собственному документу на складе_level.
// User
var mongoose = require("mongoose"),
Schema = mongoose.Schema,
Warehouse_level = mongoose.model("warehouse_level");
// There are no users in DB, we need create default ones
// But first, we need to create collection document for warehouse_level
// and warehouse (not shown in this code snippet)
Warehouse_level.create({}, function (err, warehouseLevel) {
if (err) { console.error(err); return; }
// warehouse_level document is created, let's create user
User.create({ username: ..., warehouse_level: warehouseLevel._id });
});
вы, возможно, придется использовать объект внутри вашего ключа по умолчанию, например, по умолчанию: { – Zargold
Привет - схема, определенная как: var Schema = DB.mongoose.Schema; – Zargold
var Schema = DB.mongoose.Schema; throws error - Ошибка ссылки - DB не определена – James07