如何将一个对象插入到mongo数组中的另一个对象中

Posted

技术标签:

【中文标题】如何将一个对象插入到mongo数组中的另一个对象中【英文标题】:How to insert an object into another object within an array in mongo 【发布时间】:2019-06-28 15:57:36 【问题描述】:

我有一个 mongo db,我在其中创建了一个记录,该记录在数组中包含一个对象(例如,员工:[name:Bob,Age:30]。我现在想更新数组中的对象,使其看起来像 [name:Bob, age: 30, pay:400]。如何在节点/快速路由中执行此操作?如果我使用类似:

router.put("/addPay/:id",function(req,res)
Team.findByIdAndUpdate(req.params.id,$push:employee: $each: 
[pay:req.body.pay],........

这只是将 pay: XXX 作为一个单独的对象推送到数组 [name:Bob, age: 30, pay:400, pay: XXX] 中,而不是将其插入到已经存在的对象中。我知道有很多关于在 SO 上推入对象和数组等的问题,但我找不到与这种情况类似的例子。谢谢!

【问题讨论】:

req.body 是否包含员工姓名? 不是支付金额(例如 400)。如果我 console.log 它,我会从我的表单中获取传递的值,这样就可以了...... 那么你怎么知道哪个员工应该设置这个值呢?该数组中是否始终只有一个值? 没错——只有一名员工。我使用的模型模式实际上比这更复杂 - 我只是为了解决我的问题。 好的,那么@cowCrazy 提供的答案应该适合你,就用employee.0.pay 【参考方案1】:

你需要有你想改变的对象的索引,然后你这样写:

'array.index.keyToUpdate'.

如果你在更新操作之前有对象的索引,你可以这样做:

$set: 'employee.<indexToChange>.pay': 400 .

要使其动态并基于您可以执行的查询:

update( 'employee.name': 'Bob' , $set: 'employee.$.pay': 400 ).

在这种情况下,$ 代表数组中的第一个匹配对象。

【讨论】:

以上是关于如何将一个对象插入到mongo数组中的另一个对象中的主要内容,如果未能解决你的问题,请参考以下文章

将派生类中的对象插入到所述对象的另一个实例中(使用 vector.insert 函数)C++

将数组中对象的字段添加到同一数组中对象的另一个字段MongoDB

类定义中的 Mongo _id

如何填充数组内的对象和猫鼬中的另一个数组中的所有用户字段

我们如何根据节点js中的另一个对象数组值对对象数组进行排序

将元素从一个对象添加/合并到数组内的另一个对象