Mongoose / MongoDB动态对象属性名称和更新

时间:2015-06-24 22:22:48

标签: node.js mongodb

我试图做一些棘手的事情,但我不确定这是否可行。 这是:

我有一个使用对象处理的用户。 Dispos包含几个月的数组,所以可以

user.dispos: {"02-2015" : [], "05-2015" : [] }

现在,我想对特定月份进行动态更新, 例如,我想只更新user.dispos [" 02-2015"]字段而不是替换整个dispos对象,让[" 05-2015"]保持不变。 现在我试过了:

User.update({ _id:  req.body.id }, 
{ $set: { dispos["02-2015"]: disposOf-02-2015} }, function(error){
   if (error) return res.send(500, err);
   return res.send(204) });

它不起作用,但你理解我的意思......我想更新某个位置的处置,而不是替换整个属性。 谢谢你的帮助。

修改

通过使用点表示法并将属性名称包装在引号中,它几乎就在那里。我使用变量来设置处置的月份年份。使用$set: { "dispos.monthYear": dispos },我得到dispos : { "monthYear" : { "06-2015 : [] ...} }。好吧,我只是不需要这个" monthYear"等级应该是动态的mont-year名称。在这种情况下,monthYear =" 06-2015"所以我希望dispos : { "06-2015": []...}不会删除我的其他dispos {"07-2015"}

1 个答案:

答案 0 :(得分:1)

您需要事先动态创建06-24 16:20:05.682 D/TestDialogFragment﹕ onConfigurationChanged 06-24 16:20:05.682 D/TestDialogFragment﹕ portrait 06-24 16:20:05.682 D/TestDialogFragment﹕ 504 601 06-24 16:20:05.852 D/TestDialogFragment﹕ onLayoutChange 06-24 16:20:05.852 D/TestDialogFragment﹕ 84 1021 06-24 16:20:08.695 D/TestDialogFragment﹕ onConfigurationChanged 06-24 16:20:08.695 D/TestDialogFragment﹕ landscape 06-24 16:20:08.695 D/TestDialogFragment﹕ 84 1021 06-24 16:20:08.865 D/TestDialogFragment﹕ onLayoutChange 06-24 16:20:08.865 D/TestDialogFragment﹕ 504 601 06-24 16:20:13.550 D/TestDialogFragment﹕ onConfigurationChanged 06-24 16:20:13.550 D/TestDialogFragment﹕ portrait 06-24 16:20:13.550 D/TestDialogFragment﹕ 504 601 对象。

$set

然后在您的查询中使用此var $set = { $set: {} }; $set.$set['dispos.' + monthYear] = dispose; // $set => { $set: { "dispos.02-2015": "disposOf-02-2015"} }

$set

BTW,你originally came up with可能在future versions of JS中实际工作的内容。