【问题标题】:Update array and push object in same array of array using MongoDB使用 MongoDB 更新数组并在同一数组数组中推送对象
【发布时间】:2020-05-15 16:59:31
【问题描述】:

如果我有这样的结构,那么: 我想更新dairyDailyLogs卡路里并根据条件在早餐中推送一个对象(条件以找到需要完成的对象位置)

"dairyDailyLogs":[
   {
      "breakfast":[
         {
            "mealType":1,
            "mealId":"5d758afe89527212109703d1"
         }
      ],
      "calories":100,
      "consumptionDateString":"5/15/2020"
   },
   {
      "breakfast":[
         {
            "mealType":1,
            "mealId":"5d758afe89527212109703d1"
         }
      ],
      "calories":100,
      "consumptionDateString":"5/16/2020"
   }
]

请帮忙!!

这是我进行的许多其他尝试中主要的两次尝试:

db.user_dairy.update({
  "dairyDailyLogs.consumptionDateString": "5/15/2020"
},
{
  $set: {
    "dairyDailyLogs.$": {
      "breakfast": [
        {
          mealType: 1,
          mealId: "5d758afe89527212109703d1"
        }
      ],
      calories: 200,
      consumptionDateString: "5/15/2020"
    }
  }
},
{});

db.user_dairy.updateOne({
  "dairyDailyLogs.consumptionDateString": "5/15/2020"
},
{
  $push: {
    "dairyDailyLogs.$.breakfast": {
      mealType: 2,
      mealId: "5d758afe89527212109703d1"
    }
  },
  $set: {
    "dairyDailyLogs.$": {
      calories: 200
    }
  }
},
{});

结果数组需要是这样的:

"dairyDailyLogs":[
   {
      "breakfast":[
         {
            "mealType":1,
            "mealId":"5d758afe89527212109703d1"
         },
         {
            "mealType":1,
            "mealId":"5d758afe89527212109703d2"
         }
      ],
      "calories":200,
      "consumptionDateString":"5/15/2020"
   },
   {
      "breakfast":[
         {
            "mealType":1,
            "mealId":"5d758afe89527212109703d1"
         }
      ],
      "calories":100,
      "consumptionDateString":"5/16/2020"
   }
]

【问题讨论】:

  • 那么您的预期输出是什么?我也不明白你需要什么。更新calories的条件是什么?
  • 请说明您的“条件”或要更新哪个数组的查询条件?
  • 好的,所以我猜你已经检查了数组,我需要的是:我想更新卡路里键并想在早餐数组中推送一个对象,其中 "consumptionDateString":"5/15/2020"应该匹配这个或任何给定的日期..对不起!代码未格式化
  • 这个数组已经是 mongo 文档的一部分,我正在寻找的是:用所需的条件更新这个子文档。我正在更新我的问题并为您提供操作后我想要的示例结果数组@igorkf
  • @jps 感谢您的链接...,感谢您从问题中删除我的紧急关键字,但我给了它更多的 2-3 小时,但仍然无法找到任何解决方案它在一个查询中..

标签: mongodb mongodb-query


【解决方案1】:

你可以试试这样的:

1) 根据以下条件过滤:

"dairyDailyLogs.consumptionDateString": "5/15/2020"

2) 使用$push 将新餐添加到找到的文档的数组中。

3) 将其与$set 结合以设置calories 的新值。

db.user_dairy.updateOne({
  "dairyDailyLogs.consumptionDateString": "5/15/2020"
},
{
  $push: {
    "dairyDailyLogs.breakfast": {
      "mealType": 9,
      "mealId": "new ID"
    }
  },
  $set: {
    calories: 200
  }
})

确保updateOne 是适合您的正确命令。这只会更新它找到的与此条件匹配的第一个文档。

注意:此代码未经测试。

【讨论】:

  • 嗨@james 这将更新该文档根目录中的数据(与dairyDairyLogs 平行),正如您在我编辑的问题中看到的那样,我提供了结果数据意味着我想更新数据在dailyDailyLogs 数组中
  • @AnkurGoel 抱歉,很难说出您要添加哪些特定字段。您要完全插入新早餐吗?还是只是在早餐阵列中添加新餐?生病也会更新我的答案以在dailyDailyLogs中更新它
  • thanks 4 update...请查看结果数组(在这个问题的最后一个),卡路里也需要在dairyDailyLogs 数组中更新..请在问题中检查结果数组并与它进行比较现有数组(在此问题的第一部分提供)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多