Лучший способ сделать это - использовать структуру агрегации для вычисления нашего нового поля.
Наиболее эффективное решение в MongoDB 3.4 с помощью $addFields
и $out
операторов конвейерной агрегации.
db.collection.aggregate(
[
{ "$addFields": {
"name": { "$concat": [ "$firstName", " ", "$lastName" ] }
}},
{ "$out": "collection" }
]
)
Обратите внимание, что это не обновляет вашу коллекцию, а вместо этого заменяет существующую коллекцию или создает новый. Также для операций обновления, для которых требуется «литье типов», вам потребуется обработка на стороне клиента, и в зависимости от операции вам может понадобиться использовать метод find()
вместо метода .aggreate()
.
. Мы делаем это с помощью $project
наших документов и используем оператор агрегации строк $concat
для возврата конкатенированной строки , we Оттуда вы затем перебираете курсор и используете оператор обновления $set
, чтобы добавить новое поле в ваши документы, используя массовые операции для максимальная эффективность.
var cursor = db.collection.aggregate([
{ "$project": {
"name": { "$concat": [ "$firstName", " ", "$lastName" ] }
}}
])
из этого, вам нужно использовать bulkWrite
.
var requests = [];
cursor.forEach(document => {
requests.push( {
'updateOne': {
'filter': { '_id': document._id },
'update': { '$set': { 'name': document.name } }
}
});
if (requests.length === 500) {
//Execute per 500 operations and re-init
db.collection.bulkWrite(requests);
requests = [];
}
});
if(requests.length > 0) {
db.collection.bulkWrite(requests);
}
В этой версии вам необходимо использовать устаревший API Bulk
и его связанные методы .
var bulk = db.collection.initializeUnorderedBulkOp();
var count = 0;
cursor.snapshot().forEach(function(document) {
bulk.find({ '_id': document._id }).updateOne( {
'$set': { 'name': document.name }
});
count++;
if(count%500 === 0) {
// Excecute per 500 operations and re-init
bulk.execute();
bulk = db.collection.initializeUnorderedBulkOp();
}
})
// clean up queues
if(count > 0) {
bulk.execute();
}
cursor["result"].forEach(function(document) {
db.collection.update(
{ "_id": document._id },
{ "$set": { "name": document.name } }
);
})
Тем, которые предлагают конечные автоматы вместо ОС, потому что у них есть мало служебное, Вы могли бы хотеть проверить Contiki. Это является очень маленьким и свободным. Это не имеет традиционной модели потоков, вместо этого это использует ProtoThreads: http://www.sics.se/~adam/pt/.
ProtoThreads дают Вам что-то семантика поточной обработки приближения без издержек реальной ОС со много стеками и т.д... В качестве награды Вам не нужен никакой вид ОС для использования их Contiki или иначе.
Мы использовали их на одном проекте с большим успехом. Они действительно делают сложный код написания намного легче.
Я записал тот несколько лет назад для Z80, но z80 не поддерживает аппаратную многозадачность или подкачку страниц, многозадачность возможна, но Ваша свобода довольно ограничена, Вы не должны прокручивать с материалом как подобный переходы в абсолютных адресах или различные положения запуска в различных программах
Я испытываю некоторые затруднения в обеспечении типа 8-разрядного процессора, который Вы планируете использовать здесь - в основном, если это будет что-либо достаточно мощное для выполнения чего-нибудь как ОС (H8, например), то Вы почти наверняка найдете, что микро с удаленной сердцевиной ARM будет столь же дешевым.
Повод - RTOS, который работает в крошечных местах (ТМ). - Скромный ROM повода и миниатюрные требования RAM означают, что у Вас могут быть событийно-ориентированные, основанные на приоритете, многозадачные приложения почти в любом однокристальном микроконтроллере, с большим количеством комнаты уехал в Ваше приложение. С Поводом Вы можете: Реализуйте новые проекты быстро *, Улучшают функциональность с помощью существующих ресурсов *, Улучшают производительность в реальном времени * Многозадачный.
Softools также обеспечивает ОС (названный TurboTask) для Процессоров Кролика.
Существует библиотека, которая предоставляет основное планирование задач Кролику. Библиотека работает с компилятором Softools, но не компилятором кролика.
Я полагаю, что Contiki будет работать. Adam Dunkels делает некоторый действительно интересный материал.
Это работает на большом количестве платформ, включая Commodore 64.
Я использовал uC/OS на Z180 (машина на 8 битов). Я должен был портировать на нашу пользовательскую окруженную валом модель памяти. Но иначе было большим, особенно имея подробную книгу, описывающую всю функциональность. И даже при том, что это был RTOS, мы все еще должны были использовать потоки и т.д. очень экономно.
Rabbit Semiconductor имеет порт MicroC/OS II для их процессоров.
Это, вероятно, не, что Вы хотите, но для MSX и Armstrad, там абсолютно удивительный GUI ОС по имени SymbOS (http://www.symbos.de/). То, что удивительно об этом, то, что это было полностью сделано одним немецким парнем по имени Prodatron (http://www.prodatron.net/). Это имеет реальную многозадачность и много приложений, что Вы ожидали бы от современной ОС:
Я видел продемонстрированный, он - автор, и единственный комментарий от аудитории был, "Необходимо быть grazy!". Никто никогда не видел такие функции на 8-разрядном компьютере MSX прежде.
Существует также Uzix для MSX базирующиеся (z80) компьютеры, Unix Как, Совместимый Posix, работал в многозадачном режиме, приоритетный и с реализованным стеком TCP/IP.
Какова цель здесь? Встроенные Ose имеют тенденцию стоить много. (MicroC/OS II, и т.д.)
Это кажется, что можно помещать поддержку ОС перед тем, что я рассматриваю более важными вещами когда дело доходит до выбора устройства. Необходимо знать общие шаблоны разработки для платформы, Вы продолжаете работать. Не пытайтесь пихнуть понятия ПК в tinyiest встроенных микросхем как это.
OMFG... Java НЕ принадлежит на процессоре на 8 битов. Я на самом деле попробовал ту микросхему Maxix/Dallas DS80C400. Это имело упрощенную ОС (чтение: планировщик), и стек TCP/IP испек на микросхеме, и это выглядело большим на таблице данных. Это была полная авария. Медленный, медленный, медленный!
Я закончил с основанным на FPGA мягким процессором и мягким MAC. Никакая ОС... Работавший отлично. После того как ошибка FIFO на самом деле отослала пакеты настолько быстро, что каждый Windows PC в сети запер основательные прерывания обработки (даже заблокированная мышь), пока я не надел питание на dev плату.
Я лично нашел довольно трудным написать так много кода для процессора на 8 битов, что Вам даже НУЖНА ОС. Я уверен, что некоторые приложения/ситуации могут сделать это более желательным, чем я видел. Единственное использование для ОС, которую я нашел, состоит в том, когда у Вас есть некоторое сложное устройство с драйверами устройств для определенной ОС, которую требуется использовать, и затем это не "общая ОС" вопрос больше.
Познакомьтесь с очень общей галочкой таймера на 1 мс + "энергозависимый символ g_TASKS []" глобальный список флага + простое основное () цикл, который проверяет флаги задачи и подпрограммы вызовов. Конечные автоматы являются Вашим другом. У Вас будет намного лучший дескриптор о том, как Ваша система собирается работать. Это шаблоны разработки процессоров на 8 битов.
Любое время, которое Вам нужна задача A ожидать задачи B завершить, затем добавляют состояние конечного автомата к задаче A и установили задачу B что состояние... или что-то вдоль тех строк.
Намного более полезное (по моему скромному мнению), перечисляет, имел бы хорошие процессоры на 8 битов для использования, не Ose. Вот были бы мои критерии: низкая мощность, превосходная отладка (OCD), превосходная среда разработки (или просто интеграция Eclipse), низкая стоимость, хорошая поддержка компилятора C и общая устойчивость платформы/отладчика/и т.д. отладки.
ВЫСОКОТЕХНОЛОГИЧНЫМИ функциями Salvo - HI-TECH Salvo является совместный, событийно-ориентированный, основанный на приоритете многозадачный RTOS. Это для процессоров с сильно ограниченной RAM (<256 байтов), работы в аппаратном вызове; возвратите стопку 8 уровней или меньше, поддержки 16 разделяют динамические приоритетные уровни задачи, и обеспечивает межзадачную коммуникацию и синхронизацию, коммуникационный обмен ISR к задаче и разделение ресурсов. Это - чрезвычайно маленькая RAM и место ROM, никакой указатель вершины стека PUSH/POP или требуемый указатель вершины стека, ROMable и расширяемый. Низкая задержка прерывания, быстрое контекстное переключение, и портативный - записанный в ANSI C, с минимальным компилятором.
Я писал еще в середине 70-х, а в 1982 году прекратил выпуск 8-битной ОС (SDOS) для Motorola 6800/6801 / 6809.Эти операционные системы были в нескольких вариантах:
Где вы были, когда мне понадобился заказчик: -? (Я отказался от этого, когда стало ясно, что IBM выбрала Билла Гейтса молниеносным королем микропроцессорных ОС).
[Я нашел руководства по SDOS для одного пользователя в Интернете по адресу http://www.bitsavers.org/pdf/softwareDynamics/]
HACK-RTOS для микроконтроллеров Zilog eZ8, eZ80 и ZNEO