Meter JS更新mini-mongo中的数组文档

时间:2014-01-09 20:56:34

标签: javascript arrays meteor document

我想在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中不起作用,请帮助一个例子或推荐我的数据的重建。看起来这应该是一个非常基本的例子。提前谢谢。

1 个答案:

答案 0 :(得分:2)

添加选项:

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}});