OK. Я нашел решение, которое работает, хотя я не знаю, является ли оно оптимальным для случаев, когда я рисую большое количество документов модели из БД. Но, в любом случае, вот оно.
Мне нужно использовать почтовый хук для init в схеме фрагмента. Другими словами, EmployeeSnippet должен выглядеть так:
const EmployeeSnippetSchema = new Schema({
firstName: String,
lastName: String,
address: {
city: {
type: Schema.Types.ObjectId,
ref: 'City',
autopopulate: { select: 'cityName state' }
}
},
residenceCity: String,
residenceState: String
});
Я просто добавляю следующий хук:
[ 1111]
EmployeeSnippetSchema.post('init', function(doc) {
if (doc.address && doc.address.city) {
doc.residenceCity = doc.address.city.cityName;
doc.residenceState = doc.address.state;
}
delete doc.address;
});
И это работает, хотя, как я сказал ранее, я не знаю, является ли это оптимизированным решением, когда мы получаем большое количество документы, но это лучшее, что я мог придумать.
P.S. Я только что понял, что использовал «autopopulate», который не является функцией, которая поставляется из коробки с мангустом. На самом деле это плагин команды Mongoose: http://plugins.mongoosejs.io/plugins/autopopulate
Вы можете использовать WMI для получения названия продукта ("Microsoft® Windows Server® 2008 Enterprise"):
using System.Management;
var name = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast<ManagementObject>()
select x.GetPropertyValue("Caption")).FirstOrDefault();
return name != null ? name.ToString() : "Unknown";
Почему бы не использовать Environment.OSVersion
? Это также скажет Вам, какая работа это - Windows, Mac OS X, Unix, и т.д. Чтобы узнать, работаете ли Вы в 64 битах или 32 битах, используйте IntPtr.Size
- это возвратит 4 байта для 32 битов и 8 байтов для 64 битов.
Одной вещью остерегаться является эта информация, обычно локализуется и сообщит по-другому в зависимости от языка ОС.
Win32_OperatingSystemОбратите внимание, что вопрос об архитектуре процессора сложен:
делают Вы имеете в виду (выше numers, требуют, чтобы более низкие числа были верны):
, если Вы рады, что все 3 должны быть верными затем
IntPtr.Size == 8
, Указывает, что все три верны