2016-11-13 95 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); 
});