2013-10-06 24 views
0

我在使用MongoDB和Mongoose查询时遇到了麻烦。问题是,我有这个Menu模式:如何使用Mongoose获取和更新数组中的特定对象?

var menuSchema = new Schema({ 
    userID: String, 
    name: String, 
    meals: [{ 
     day: Number, 
     hour: Number, 
     minute: Number, 
     aliments: [{ 
      name: String, 
      amount: Number, 
     }], 
    }], 
}); 

所以我想知道如何获得一个特定的膳食或滋养品,以及如何对其进行更新throught的_id值,当我将它们添加自动生成。

非常感谢。

David。

回答

2

我终于可以得到它的膳食工作,但不是为食品。我这样做的饭菜:

Menu.update({_id: request.params.menu_id, 'meals._id': request.params.meal_id}, {'meals.$.hour': request.body.hour)}, function(error, affected, raw) { 
    response.send(error); 
}); 

这对抚养:

Menu.update({_id: request.params.menu_id, 'meals.aliments._id': request.params.aliment_id}, {'meals.aliments.$': {name: request.body.name, amount: request.body.amount}}, function(error, affected, raw) { 
    response.send(error); 
}); 

编辑:行,所以我找了其他职位的答案,我找到了解决方案。

看起来$ position操作符不适用于多级数组。实际上,它仅适用于1级阵列(这就是为什么它适用于膳食但它不适用于食品)。

所以我想解决方案是分开吃饭或在文件中的食品,并用mealID或alimentID引用它们。

我希望他们很快添加多级位置运算符。这会很棒。

相关问题