Для этого проекта MEAN Stack, я хотел бы сохранить в тех же документах коллекции с:сохранить синхронную (не дублировать) информацию в асинхронном процессе
- различных типов
- уникальные хронологический номером для каждого типа.
пример:
{ID: 1, тип: 'а', хроно: 1}
{ID: 2, тип: 'B', хроно: 1}
{ID: 3, тип: 'B', хроно: 2}
{ID: 4, тип: 'а', хроно: 2}
{ID: 5, тип: 'B', хроно : 3}
...
На переднем конце, я использовать цикл
for (var i++; i < type.length; i++) // lets say Document type = ["a", "b"]
for (var j++; j< 100; j++) // Creates 100 documents
// Front end service request directing to the NodeJS Server to create a document
serverDocument.createDocument(dataS).success(function(dataR){
counterDOC++;
$scope.documentID= dataR._id;
}
nodeJS Сервер ищет последний Chrono Номер в БД для выбранного типа документа и добавить 1.
doc = new db.Document (req.body); // req.body is for example {type: 'a'}
doc.save();
getChrono (doc); // home made function
ГЭТ функция Chrono:
var getChrono = function(doc){
var config=
{
type : doc.type,
}
query = db.Document.findOne(config).sort({$natural:-1});
query.exec(function (err, chrn){
doc.chrono = 1;
if (chrn != null)
if(chrn.chrono != null)
doc.chrono= chrn.chrono+1;
doc.update();
});
И в результате что-то подобное тому, что:
{ID: 1, тип: 'а', хроно: 1}
{ID: 2, тип: 'а', хроно: 1}
{ID: 3, тип: 'а', хроно: 1}
{ID: 4, тип: 'а', хроно: 1}
{ID: 5, тип: 'а', chrono: 2} ... Конечно, идентификатор объекта уникален, но хронологические номера не уникальны для типа документа.
Насколько я понимаю, эта информация еще не сохранена в БД при запуске следующего запроса. Поэтому последний номер хронографа в БД не является последним номером хронографа в действительности.
Может ли кто-нибудь есть метод решения этой проблемы? я не хочу синхронное решения на стороне переднего конца, и логично было бы иметь на сторону сервера для управления хро номеру
Вы будете нуждаться в очереди, чтобы обработать ваши детали в синхронизации пути. – Dieterg
Привет, Дитер, я не хочу делать это на стороне фронта, потому что проблема с получением 2 пользователями одной и той же операции может привести к ошибке. И я понятия не имею, как сделать это на сервере. Возможно я пропустил функцию? – Alex
Вы также можете добавить эту функцию на сервер. : - – Dieterg