2016-11-13 92 views
1

我正在努力增加我的機會的價值。 出於某種原因,它不會修改它,我認爲它與$inc內的行有關。貓鼬查詢不會被修改

這裏是我的代碼:

var location: 1, 
option = 1, 
t = option - 1, 
increase = 500; 




easyCrime.update({userid: playerid, "locations.location" : location, "locations.location.easycrime.id" : option }, {"$inc" : {"locations.$.location.easycrime[t].chance" : increase}}).then(function (result) { 
    console.log(result); 
}); 

結果:

{ ok: 1, nModified: 0, n: 0 } 

爲什麼心不是這種修改?

型號:

userid: { 
        type: String, 
        default: '57c1c0f3b6b20c011242bf22' 
       }, 


locations: [ 
     { 
      userid: { 
       type: String, 
       default: '57c1c0f3b6b20c011242bf22' 
      }, 
      location: { 
       type: Number, 
       default: 1 
      }, 
      easycrime: [ 
       { 
        optioname : { 
         type: String, 
         default: 'text' 
        }, 
        chance: { 
         type: Number, 
         default: 200 
        }, 
        id : { 
         type: Number, 
         default: 1, 
        } 
       } 
      ], 
     } 
    ], 

編輯:

發現,locations.location.easycrime不存在。 更新代碼:

easyCrime.update({userid: playerid, "locations.location" : location, "locations.easycrime.id" : option }, {"$inc" : {"locations.$.easycrime[0].chance" : increase}}).then(function (result) { 
      console.log("inserted chance"); 
      console.log(result); 
      return resolve(result); 
     }); 

,但仍然不會工作{ ok: 0, n: 0, nModified: 0 }

編輯2:

嘗試以下查詢:

var location: 1, 
option = 1, 
t = option - 1, 
increase = 500; 
     console.log("updating chance " + increase); 
easyCrime.update({userid: playerid, "locations.location" : location, "locations.easycrime.id" : option }, {$inc : {"locations.$.easycrime.$.chance" : increase}}).then(function (result) { 
      console.log("inserted chance"); 
    console.log(result); 
}); 

console.log("inserted chance");console.log(result);不會被執行。 (意思是,它不會運行)

+0

模式下,你發現的地點,並在地方你會發現easycrime。那至少是我想要的。 @阿魯納,我看到了錯誤,但不知道它是否會解決它。 – maria

+0

@Aruna,更新線程。 – maria

+0

請看看我的答案,其他建議 – Aruna

回答

1

您的代碼看起來easycrimelocations.location.easycrime它在locations.easycrime在您的模型中存在。我修改了它。

另外locations.easycrime是一個數組,因此您應該使用locations.$.easycrime.$.chance而不是locations.$.easycrime[t].chance

也注意到,您的查詢查找option,但用t更新它。使兩者相同如下。

var location: 1, 
option = 1, 
t = option - 1, 
increase = 500; 

easyCrime.update({userid: playerid, "locations.location" : location, "locations.easycrime.id" : option }, {$inc : {"locations.$.easycrime.$.chance" : increase}}).then(function (result) { 
    console.log(result); 
}); 
+0

當我嘗試時它不會被執行。 – maria

+0

http://prntscr.com/d6uy3e結果:增加機會 更新機會500 ..沒有更多。 – maria

+0

你可以用你試過的東西更新你的問題嗎?我將爲此創建一個示例,並將很快嘗試:-) – Aruna

1

試試這個應該工作

var location: 1, 
    option = 1, 
    t = option - 1, 
    increase = 500; 
var updateChance={}; 
updateChance["locations.$.easycrime."+t+".chance"] = increase; 

easyCrime.update({userid: playerid, "locations.location" : location, "locations.easycrime.id" : option }, {$inc : updateChance }).then(function (result) { 
     console.log("inserted chance"); 
console.log(result); 
});