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