我有一个更新函数,可以在MongoDB文档中创建一个新的活动array."Campaign"数组中的每个活动都有一个"名称"和另一个称为"Leads"的数组

这就是我创建它的方式:

await users.updateMany(
  { email: user.email },
  { $push: { campaigns: { name: campaignname, type, leads: [] } } }
);

现在我要做的是将一些数据(对象数组)"添加"到具有指定活动名称的"Leads"数组中.

因此,我实际上希望搜索用户,通过"name"字段 Select Campaign数组中的活动,并将对象数组推入"Leads"数组中.

我试过:

await users.updateOne({
  $push: {
    "campaigns.$[elem].leads": { $each: leads }
  }
},
{
  arrayFilters: [
    {
      "elem.name": campaignname
    }
  ]
})

不起作用

请任何人及时帮助

推荐答案

您可以执行以下操作:

const doc = await users.findOneAndUpdate(
    {
        email: user.email,
        campaigns: {
            $elemMatch:{
                name: campaignname
            }
        }
    },
    {
       $push: {
          "campaigns.$.leads": {
             $each: [
                {key: 'value'},
                {key: 'value'}
             ]
          }
       }
}, {new: true}); //< {new: true} is mongoose specific

或者,如果要推送的对象数组已经构建,则可以使用扩展语法:

const arr = [{key: 'value'}, {key: 'value'}]
const doc = await users.findOneAndUpdate(
    {
        email: user.email,
        campaigns: {
            $elemMatch:{
                name: campaignname
            }
        }
    },
    {
       $push: {
          "campaigns.$.leads": {
             $each: [
                ...arr
             ]
          }
       }
}, {new: true}); //< {new: true} is mongoose specific

要从campaigns.leads数组中删除这些对象中的一个,则可以使用$pull{key: 'value'} Select 它们,如下所示:

const doc = await users.findOneAndUpdate(
    {
        email: user.email,
        campaigns: {
            $elemMatch:{
                name: campaignname
            }
        }
    },
    {
       $pull: {
          "campaigns.$.leads": {
             key: 'value'
          }
       }
}, {new: true});

或者,如果只想将它们全部删除,可以将campaigns.leads设置为空数组,如下所示:

const doc = await users.findOneAndUpdate(
    {
        email: user.email,
        campaigns: {
            $elemMatch:{
                name: campaignname
            }
        }
    },
    {
       $set: {
          "campaigns.$.leads": []
       }
}, {new: true});

Node.js相关问答推荐

无法验证叶签名|无法验证第一个证书

在导入时未找到Pupeteer-PAGE-Proxy包

使用NodeJS输出检索Base64图像的网络报废

如何在.npmrc中添加 comments ?

用于SLACK命令返回json而不是文本的AWS lambda函数

模块';"; node :流程&没有导出的成员';dlopen';

Puppeteer 的 BrowserFetcher 发生了什么?

找不到模块bcryptjs

Nodejs 从链接数组中获取数据并保存到 mongodb

我误解了外键的工作原理吗?使用续集

在路由上使用中间件时,Nodejs Express 应用程序失败

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

Discord.js V14 interaction.editReply 给出了一个无效的 webhook 令牌错误

Web3.js 脚本在监听 CreatedPairs 时退出

使用 grunt 服务器,如何将所有请求重定向到根 url?

`npm install` 以Killed结尾

Node.js 变量声明和范围

node.js 是否支持yields ?

在多个文件 node.js 之间共享和修改变量

node.js 模块和函数中this的含义