2016-06-29 2 views
1

나는 레스토랑 용 mongodb에 데이터베이스가 있습니다. 샘플 데이터베이스는 다음과 같습니다. 이 문서에서 mongodb 문서의 필드를 yii2 모델의 배열 배열에 저장 업데이트

{ 
    "restaurantId":"1", 
    "menu": 
    { 
     "menuCategory": 
     [ 
      { 
       "menuCategoryId":"12" 
       "menuItems": 
       [ 
        { 
         "menuId":"123", 
         "likesCount":0 
        }, 
        { 
         "menuId":"1234", 
         "likesCount":0 
        } 
       ] 
      }, 
      { 
       "menuCategoryId":"1290" 
       "menuItems": 
       [ 
        { 
         "menuId":"2222", 
         "likesCount":0 
        }, 
        { 
         "menuId":"3333", 
         "likesCount":0 
        } 
       ] 
      } 
     ] 
    } 
} 

는, 나도 증가하거나 좋아하는이 yii2에 수신되는 menuId와 및 restaurantId 불리하게 감소한다. 식당에서 특정 메뉴 ID에 대한 좋아요 수를 찾지 못했습니다.

likesCount를 업데이트하기 위해 다음 쿼리를 시도했습니다.

db.restaurants.update({$and:[{"restaurantId":"1"},{"menu.menuCategory.menu.menuId":"123"}]}, {$set:{"likesCount":5}}) 
+0

달성하고자 시도한 것을 보여줄 수 있습니까? – Shrabanee

+0

@ Shrabanee 시도한 쿼리로 내 질문을 업데이트했습니다. –

답변

0

이 쿼리는 당신을 도울 수 있습니다 -

db.restaurants.update(
{$and:[{"restaurantId":"1"}, 
{"menu.menuCategory.menuItems.menuId":"123"}]}, 
{$set:{"menu.menuCategory.0.menuItems.0.likesCount":5}}) 

편집

다음과 같은 것을보십시오 : -이 당신을 도울 수 있다면

db.restaurants.find(
{"restaurantId":"1","menu.menuCategory.menuItems.menuId":"123"}).toArray(
function(err, result) 
{ 
    var index,found = false; 
    for(var j in result[0].menu.menuCategory){ 
    for(var i in result[0].menu.menuCategory[j].menuItems) 
    { 
     if(results[0].menu.menuCategory[j].menuItems[i].menuId == "123") 
     { 
      found = true; 
      index = i; 
      break; 
     } 
    }} 

    if(found) 
    { 
     var x = 'menu.menuCategory.$.menuItems.'+index+'.likes'; 

     var updateObject = {$set : {}};  
     updateObject['$set'][x] = 5; 

     db.restaurants.update(
    {"restaurantId":"1", 
    "menu.menuCategory.menuItems.menuId":"123"}, updateObject); 
    } 
}); 

참조.

+1

이 쿼리는 이전에 시도해 보았습니다. '경로'menu.menuCategory. $. likesCount'$에서 찾을 수있는 위치 지정 (즉 '$') 수가 너무 많습니다. –

+0

'0'을 제자리에 바꾸려고 시도 했습니까? '$ '중? – Shrabanee

+1

네, 해보았습니다. '0'은 배열의 첫 번째 객체를 줄 것입니다. 여기서 필수 객체는'$'의 두 경우 모두 항상 '0'번째 위치에있을 것입니다. –

관련 문제