findOneAndUpdate() 基于查找查询条件的子数组

Posted

技术标签:

【中文标题】findOneAndUpdate() 基于查找查询条件的子数组【英文标题】:findOneAndUpdate() a sub-array based on conditions in find query 【发布时间】: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 并有一个执行此任务的函数,无论提供什么查询,我都会在我的函数中编写此查询。

【问题讨论】:

【参考方案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);它更新了数据库。谢谢! 乐于助人:)

以上是关于findOneAndUpdate() 基于查找查询条件的子数组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - Mongoose 查询 findOneAndUpdate() 不更新/复制数据库

MongoDB - Mongoose 查询 findOneAndUpdate() 不更新/复制数据库

findOneAndUpdate mongoose查询返回旧数据库值

Mongoose:通过 findOneAndUpdate 查询使用对象数组的总和更新根数据属性不起作用

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]