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 查询使用对象数组的总和更新根数据属性不起作用