2016-05-05 2 views
1

Я хочу, чтобы вытолкнуть элемент в массив элементов (корневого документа> Категории> подкатегорий> элементы)обновление элемент массива из массива в MongoDB

Я использую NodeJS с MongoDB НПМ пакета

Мой документ структура должна быть как следующий

{ 
    "_id": "572a77641b24ed3404f43690" 
    "categories": [ 
     { 
      "id": "572bbac072d7ee3026a69467" 
      "Name": "Foods", 
      "subcategories": [ 
       { 
        "id": "572a777c1b24ed3404f43691", 
        "Name": "Pizza" 
        "items": [ 
         { 
          "id": "572ba1666ca263303121acd4" 
          "Name": "4 Seasons", 
          "Price": "6.0" 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

Мой текущий код

app.post("/item/:subcatid", function(req, res) { 
    var subId = req.params.subcatid; 
    var item = req.body; 

    item.id = new ObjectId(); 

    items.update({ "categories.subcategories.id": ObjectId(subId) }, { $push: { "categories.0.subcategories.$.items": item } }, function(err, result) { 
     res.send(result); 
    }); 
}); 

Wh я могу это сделать?

+0

на самом деле это работает, но он будет обновлять первую категорию, он не будет полезно, если я хочу, чтобы обновить определенную категорию, он всегда идет до самого первого! –

ответ

0

Только что нашел решение, не очистив его, но работает правильно!

app.post("/item/:subcatid", function(req, res) { 
    var subId = req.params.subcatid; 
    var item = req.body; 

    item.id = new ObjectId(); 

    items.findOne({ "categories.subcategories.id": ObjectId(subId) }, { "categories.subcategories.$": 1 }, function(err, doc) { 
     for (var i = 0; i < doc.categories[0].subcategories.length; i++) { 
      var elem = doc.categories[0].subcategories[i]; 
      if (elem.id == subId) { 
       items.update({ "categories.subcategories.id": ObjectId(subId) }, { $push: { ["categories." + i + ".subcategories.$.items"]: item } }, function(err, result) { 
        res.send(result); 
       }); 

       break; 
      } 
     } 
    }); 
}); 
Смежные вопросы