【问题标题】:How do I update objects details in an array?如何更新数组中的对象详细信息?
【发布时间】:2017-07-31 20:44:59
【问题描述】:

我想更新我的 mongo 文档中的份量、卡路里和营养成分。我如何才能更新详细信息?

{
"_id": ObjectId("id"),
"user_id": ObjectId("id"),
"date": 20170210,
"snacks": [
  {
  "nutrients": {
    "protein": "0",
    "carbs": "0",
    "fat": "0"
  },
  "servings": 1,
  "calories": 0.35,
  "name": "Coca-Cola zero"
 }
],
"dinner": [ ],
"lunch": [ ],
"breakfast": [ ]
}

我试过使用 $set 但它根本没有用。这是我一直在尝试的:

     user_food.update({user_id : req.session.user_id, date: 20170210, snacks:{name:"Coca-Cola zero"}}, {'$set':{'servings': 2}}, function(err, other){
        if(err){
            console.log("something went wrong: " + err);
            return res.status(500).send(err);
        }
        else{
            console.log("this is other: " + other);
            return res.status(200).send(other);
        }
    });

已解决

有效的查询:

        user_food.update({user_id : req.session.user_id, date: 20170210, 'snacks.name': food},{$set: {'snacks.$.servings': serving}},function(err, other){
        if(err){
            console.log("something went wrong: " + err);
        return res.status(500).send(err);
        }
        else{
            console.log("this is other: " + other);
        return res.status(200).send(other);
        }
    });

【问题讨论】:

  • 我在你的例子中没有看到$set
  • 试试user_food.update({user_id : req.session.user_id, date: 20170210, "snacks.name":"Coca-Cola zero"}, {'$set':{'snacks.$servings': 2}}, function(err, other){...})。使用positional操作员

标签: javascript arrays mongodb mongoose javascript-objects


【解决方案1】:

您必须指定记录必须具有属性snacks.name = 'Coca-Cola zero' 而不是snacks = {name: 'Coca-Cola zero'}

所以你的查询应该是这样的:

user_food.update({
  user_id : req.session.user_id,
  date: 20170210,
  'snacks.name': 'Coca-Cola zero'
},{
  $set: {'snacks.$servings': 2}
},
function(err, other){
  if(err){
    console.log("something went wrong: " + err);
    return res.status(500).send(err);
  }
  else{
    console.log("this is other: " + other);
    return res.status(200).send(other);
  }
});

【讨论】:

  • 每当我尝试时,我都会收到以下错误消息“无法使用部分(零食零食。$servings)来遍历元素({零食:[{营养素:{蛋白质:“0”,碳水化合物:“0”,脂肪:“0”},份量:1,卡路里:0.35,名称:“可口可乐零”}]})”
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2021-10-13
相关资源
最近更新 更多