mongoose在第3级更新嵌套文档中的特定字段

时间:2016-01-25 09:38:32

标签: node.js mongodb mongoose mongodb-query

猫鼬计划:

var restsSchema = new Schema({
    name: String,
    menu: mongoose.Schema.Types.Mixed
});

simplfied document:

{
    name: "Dominos Pizza",
    menu:{
         "1":{
              id: 1,
              name: "Plain Pizza",
              soldCounter: 0
           },
         "2":{
              id: 2,
              name: "Pizza with vegetables",
              soldCounter: 0
            }
     }
}

我正在尝试在给出单个/数组“菜单项”(例如上面文档中的“1”或“2”对象)时更新soldCounter,如下所示:

function(course, rest){
    rest.markModified("menu.1");
    db.model('rests').update({_id: rest._id},{$inc:  {"menu.1.soldCounter":1}});
}

一旦这可行,我显然会想让它更通用,例如:(这种语法不起作用,但证明了我的需要)

function(course, rest){
    rest.markModified("menu." + course.id);
    db.model('rests').update({_id: rest._id},{$inc:{"menu.+"course.id"+.soldCounter":1}});
}

任何人都可以帮忙解决这个问题吗?

我找了一个答案,但在第3级找不到任何答案。

更新 在ducument的subDocument中添加了id

1 个答案:

答案 0 :(得分:1)

我认为您希望将所有ID添加到子文档中,您可以按照以下方式执行此操作。

Rest.find({_id: rest._id}, function(err, o) {
    // add all ids into sub-document...
    Object.keys(o.menu).forEach(function(key) { 
        o.menu[key].id = key; 
    });

    o.save(function(err){ ... });
});

看来你想在查询中操作密钥,恐怕你不能这样做。

请参阅以下问题。

Mongodb - regex match of keys for subobjects

MongoDB Query Help - query on values of any key in a sub-object