如何使用Mongoose获取和更新数组中的特定对象?

时间:2013-10-06 13:23:53

标签: node.js mongodb

我在使用MongoDB和Mongoose查询时遇到了麻烦。问题是,我有这个Menu架构:

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

所以我想知道如何获取特定的膳食或食物,以及如何通过我添加它们时自动生成的_id值来更新它们。

非常感谢你。

大卫。

1 个答案:

答案 0 :(得分: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级阵列(这就是为什么它适用于膳食,但它不适用于食物)。

所以我猜解决方案是在文件中分割膳食或食物,并用膳食ID或食物ID引用它们。

我希望他们尽快添加多级位置操作员。这会很棒。