【问题标题】:findOneAndUpdate() a sub-array based on conditions in find queryfindOneAndUpdate() 基于查找查询条件的子数组
【发布时间】:2019-06-01 19:23:37
【问题描述】:

Tag schema 结构如下:

_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”作为例子。

我必须根据给定的 tag_name 遍历标签集合,然后如果找到记录,则遍历它的 agent_list,它等于参数“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,我在我的 Angular 代码中使用 mongodb 并有一个执行此任务的函数,无论提供什么查询,我都会在我的函数中编写此查询。

【问题讨论】:

    标签: javascript node.js angular mongodb


    【解决方案1】:

    试试这个,

    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);
        }
    }
    

    【讨论】:

    • 它确实增加但它是临时的,它不会更新数据库。
    • 它确实有效!我刚刚使用了 this.collection.save(tags);它更新了数据库。谢谢!
    • 乐于助人:)
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2018-06-06
    • 2020-08-15
    • 1970-01-01
    • 2021-11-24
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多