如何将一个对象插入到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++