关于javascript:迷你中的计量器JS更新数组文档-Mongo

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