【问题标题】:How to insert an object into another object within an array in mongo如何将一个对象插入到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

标签: arrays node.js mongodb express javascript-objects


【解决方案1】:

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

'array.index.keyToUpdate'.

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多