【问题标题】:Meter JS update array document in mini - mongoMeter JS 更新 mini 中的数组文档 - mongo
【发布时间】:2014-01-28 15:15:10
【问题描述】:

我想在 Meteor JS 客户端 (mini-mongo) 集合中删除或编辑(更新)字段。我无法删除或更新工作。我想一次调用更新所选子数组中的所有字段。以下是数据模型的示例:

{
"_id" : "m9kqCv5szxxkpxzaA",
"dailyWeightLbs" : 0,
"date" : ISODate("2014-01-09T05:00:00.000Z"),
"food" : {
    "alcohol" : 0,
    "beverage" : {
        "choice" : ""
    },
    "breakfast" : {
        "choice" : "",
        "detailchoices" : [ 
            {
                "_id" : "GWCPt7huXHm3QQ4oH",
                "ndbNo" : "18003",
                "shrtDesc" : "BAGELS,EGG",
                "water_g" : 144.116,
                "energ_Kcal" : 1010.88,
                "protein_g" : 36.062,
                "servingGmWt" : 184
            },
            {
                "_id" : "u3ki6ruxRp5HzsEus",
                "ndbNo" : "21005",
                "shrtDesc" : "BREAKFAST ITEMS,BISCUIT W/EGG&SAUSAGE",
                "water_g" : 144.116,
                "energ_Kcal" : 1010.88,
                "protein_g" : 36.062,
                "servingGmWt" : 324
        ]
  }
}

请注意 food.breakfast.detailedchoices 是一个文档数组。该集合称为日志,已发布和订阅,仅显示当前用户数据。我尝试了以下调用,但没有奏效:

为了更新,我想将第一个数组元素中的当前子文档替换为具有相同 _id 但值不同的文档:

revisedDetailchoices = {
                "_id" : "GWCPt7huXHm3QQ4oH",
                "ndbNo" : "18003",
                "shrtDesc" : "BAGELS,EGG",
                "water_g" : 244.116,
                "energ_Kcal" : 2010.88,
                "protein_g" : 66.062,
                "servingGmWt" : 284
}

Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$set:{food:{breakfast:{detailedchoices:     revisedDetailchoices}}}});


Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {food:{breakfast:{$set: {detailedchoices: revisedDetailchoices}}}});

我试过删除:

obj{};
obj['food.breakfast.detailedchoices']   = {$elemMatch: {'_id':  Diet.foodData._id}    };
Logs.update("m9kqCv5szxxkpxzaA", {$pull: obj});

Logs.update("m9kqCv5szxxkpxzaA", {$pull: {"food.breakfast.detailedchoices._id": "GWCPt7huXHm3QQ4oH"}}); 

Logs.update("m9kqCv5szxxkpxzaA", findObject, {$pull: {food:{breakfast:{detailedchoices: {_id: "GWCPt7huXHm3QQ4oH"}}}}});

Logs.update({'_id': "m9kqCv5szxxkpxzaA", 'food':{'breakfast':{'detailedchoices': {$elemMatch: {'_id':  "GWCPt7huXHm3QQ4oH"} }}}};

Logs.update({'_id': "m9kqCv5szxxkpxzaA", 'food':{'breakfast':{'detailedchoices': {$elemMatch: {'_id':  Diet.foodData._id} }}}}, {food:{breakfast: {$pull: detailedchoices[0] }}});

Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$pull:{food:{breakfast:{detailedchoices: {$elemMatch: {'_id':  "GWCPt7huXHm3QQ4oH"} }}}}});

Logs.update({"_id": "m9kqCv5szxxkpxzaA"}, {$pull: {"food":{"breakfast":{"detailedchoices": {"_id": "GWCPt7huXHm3QQ4oH"}}}}});

还有更多。我已阅读 mongo db 和 meteor JS 帖子,但似乎无法正确使用语法。如果这在 Meteor JS 中不起作用,请提供示例或建议对我的数据进行重构。看起来这应该是一个非常基本的例子,应该可以工作。提前致谢。

【问题讨论】:

    标签: javascript arrays meteor document


    【解决方案1】:

    添加选择:

    var newChoice = {
        "_id" : "GWCPt7huXHm3QQ4oH",
        "ndbNo" : "18003",
        "shrtDesc" : "BAGELS,EGG",
        "water_g" : 244.116,
        "energ_Kcal" : 2010.88,
        "protein_g" : 66.062,
        "servingGmWt" : 284
    }
    Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$push: {"food.breakfast.detailchoices": newChoice}});
    

    要删除一个选项:

    Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$pull: {"food.breakfast.detailchoices": {_id: "GWCPt7huXHm3QQ4oH"}}});
    

    替换选项

    var newChoices = [{
        "_id" : "GWCPt7huXHm3QQ4oH",
        "ndbNo" : "18003",
        "shrtDesc" : "BAGELS,EGG",
        "water_g" : 244.116,
        "energ_Kcal" : 2010.88,
        "protein_g" : 66.062,
        "servingGmWt" : 284
    }]
    Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$set: {"food.breakfast.detailchoices": newChoices}});
    

    删除所有选项:

    Logs.update({_id: "m9kqCv5szxxkpxzaA"}, {$unset: {"food.breakfast.detailchoices": true}});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2021-09-15
      • 2021-07-20
      • 1970-01-01
      • 2019-07-04
      • 2021-04-08
      相关资源
      最近更新 更多