У меня есть следующие схемы для документа Папка:
var permissionSchema = new Schema({
role: { type: String },
create_folders: { type: Boolean },
create_contents: { type: Boolean }
});
var folderSchema = new Schema({
name: { type: string },
permissions: [ permissionSchema ]
});
Итак, для каждой страницы у меня может быть много разрешений. В моей CMS есть панель, где я перечисляю все папки и их разрешения. Администратор может редактировать одно разрешение и сохранять его.
Я мог бы легко сохранить весь документ Папка с его массивом разрешений, где было изменено только одно разрешение. Но я не хочу сохранять весь документ (у реальной схемы больше полей), поэтому я сделал это:
savePermission: function (folderId, permission, callback) {
Folder.findOne({ _id: folderId }, function (err, data) {
var perm = _.findWhere(data.permissions, { _id: permission._id });
_.extend(perm, permission);
data.markModified("permissions");
data.save(callback);
});
}
но проблема в том, что perm всегда undefined! Я попытался "статически" получить разрешение таким образом:
var perm = data.permissions[0];
и он отлично работает, поэтому проблема заключается в том, что библиотека Underscore не может запрашивать массив разрешений. Поэтому я предполагаю, что есть лучший (и рабочий) способ получить поддокумент извлеченного документа.
Любая идея?
PS: Я решил проверить каждый элемент в массиве data.permission, используя цикл "for" и проверив data.permissions [i]._ id == permission._id, но я бы хотел более разумное решение, я знаю, что там один