Mongoose/Node:将元素推入数组类型的文档字段?

Posted

技术标签:

【中文标题】Mongoose/Node:将元素推入数组类型的文档字段?【英文标题】:Mongoose/Node: push element into document field of type array? 【发布时间】:2021-03-09 12:27:11 【问题描述】:

我有一个带有数组类型字段的 Mongoose 模式,用于包含多个字符串:

const exampleSchema = new.mongooseSchema(
      field1: String,
      field2: String,
      field3: [String]
)

我正在设置后端以将新字符串连接/推送到 field3 数组中,希望得到这样的结果:


   field1: 'some string',
   field2: 'some other string',
   field3: [
              'string inside array1',
              'string inside array2',
              'string inside array3',
           ]

我正在尝试使用 findByIdAndUpdate() 执行此操作,并尝试使用扩展运算符将新字符串连接到字段 3 中,但我不完全确定如何使用该语法。

是否有任何干净的方法可以做到这一点,而不必创建一个新的更新对象来替换整个文档?

【问题讨论】:

【参考方案1】:

你只需要$push

查看this 示例以了解语法。

使用mongo是这样的

db.collection.update(
  /* Your find object*/
,

  "$push": 
    "field3": "another string"
  
)

使用$push 可以将值添加到数组中。很简单。

和使用moongoose一模一样,都得把push对象传入参数中。

model.findByIdAndUpdate(your_id, 
  "$push": 
    "field3": "another string"
  
)

【讨论】:

【参考方案2】:

我是如何学会在猫鼬中更新一小部分项目的:

const example = await exampleSchema.findById(id)

// Return if non existing
if (!example )
  return res
    .status(404)
    .send(`Example with id:$id was not found.`)

// Sets the new field3
example.field3 = [...example.field3, req.body.addedField3]

try 
  const result = await example.save()
  res.send(result)
 catch (exeption) 
  res.status(400).send(exeption.message)

这被包裹在来自express.Routerrouter.put

【讨论】:

以上是关于Mongoose/Node:将元素推入数组类型的文档字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用扩展运算符将对象数组推入特定元素

如何将一个数组推入另一个数组元素中作为 JavaScript 中的新属性? [复制]

尽管 if (应该充当过滤器),但所有元素都推入数组

将对象推入javascript深拷贝还是浅拷贝中的数组?

Redis 基础 -- 列表 List 类型 和 List 类型的常用命令

无法使用 mongoose、Node.js 将数据插入到 mongoDB 中的 Document 字段中