【发布时间】: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