Meter JS update array document in mini - mongo
我想删除或编辑(更新)Meteor JS客户端(mini-mongo)集合中的字段。我无法进行删除或更新。我想一次调用更新所选子数组中的所有字段。下面是数据模型的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | { "_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但值不同的文档:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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}}}}); |
要删除,我尝试过:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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和流星JS帖子,但是似乎语法不正确。如果这在Meteor JS中不起作用,请提供示例或建议重新构造我的数据。看来这应该是一个非常基本的示例,应该可以工作。预先感谢。
要添加选择:
1 2 3 4 5 6 7 8 9 10 | 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}}); |
删除选项:
1 | Logs.update({_id:"m9kqCv5szxxkpxzaA"}, {$pull: {"food.breakfast.detailchoices": {_id:"GWCPt7huXHm3QQ4oH"}}}); |
替换选项
1 2 3 4 5 6 7 8 9 10 | 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}}); |
要删除所有选择:
1 | Logs.update({_id:"m9kqCv5szxxkpxzaA"}, {$unset: {"food.breakfast.detailchoices": true}}); |