findOneAndUpdate () вложенный массив на основе условий в поисковом запросе - PullRequest
0 голосов
/ 07 января 2019

Структура схемы Tag выглядит следующим образом:

_id: "abcsd12312",
nsp: "localhost.com",
tags: [
    0: { tag: "#feedback",
         agent_list: [
                  0: { email : "murtaza@local.com", count: 0},
                  1: { email: "abc@gmail.com", count: 0}
         ]
       },
    1: { tag: "#spam",
         agent_list: [
                  0: { email: "abc@live.com", count: 0},
                  1: { email: "murtaza@local.com", count: 1}
          ]
        }
     ]  

У меня есть два параметра, которые исходят из источника и попадают в функцию, которую я сделал, параметры tag_name и agent_email, их значениями могут быть "#feedback" и "murtaza@local.com" в качестве примера.

Мне нужно перебрать коллекцию тегов на основе заданного имени тега, а затем, если запись найдена, перебрать свой список агента, равный значению параметра agent_email. Затем я должен увеличить его «количество» на 1.

У меня есть следующая функция:

public static async UpdateAgentTicketCount(agent_email: string, tag_name: string, nsp: string) {
    try {
        console.log(agent_email, tag_name, nsp);
        return this.collection.findOneAndUpdate({nsp: nsp, tags: {$elemMatch: {tag: tag_name}}}, {});
    } catch (error) {
        console.log(error);
    }
}

Мне нужен запрос mongodb, чтобы увеличить это число на 1, я использую mongodb в своем угловом коде и у меня есть функция, которая выполняет эту задачу, что бы ни получал запрос, я напишу этот запрос внутри своей функции.

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте это,

public static async UpdateAgentTicketCount(agent_email: string, tag_name: string, nsp: string) {
    try {
        console.log(agent_email, tag_name, nsp);
        for(let t of this.collection.tags){
            if(t.tag==tag_name){
                t.agent_list.find(agent => agent.email==agent_email).count = t.agent_list.find(agent => agent.email==agent_email).count + 1;
            }
        }
        return this.collection;
    } catch (error) {
        console.log(error);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...