不知道为什么这不起作用,我尝试了几种不同的语法变体,但不行。我也不确定在 for 循环中进行更新是否是个好主意。
基本上,我通过传递一个包含两个数组(item [] 和 item_qty [])的对象来更新用户的清单,如下所示:
var itemset = {}
itemset.item['Gold','Silver','Bronze']
itemset.item_qty[1,3,5]
itemset.qty = itemset.item.length
并且数组可以具有不同的长度,例如:
var itemset = {}
itemset.item['Platinum','Bronze']
itemset.item_qty[1,1]
itemset.qty = itemset.item.length
目标是如果项目存在则继续添加到用户的库存项目数量,或者如果不存在则添加它(连同数量)。因此,使用这两个更新的示例,用户将拥有 Platinum(1)、Gold(1)、Silver(3) 和 Bronze(6) 在它们都通过函数之后。
用户的架构是:
var UserSchema = new mongoose.Schema({
name: {type: String, required: true},
mail: {type: String, required: true},
inv: {
item: {type: String},
iqty: {type: Number}
}
})
这是功能:
function addInv(userId,itemset) {
for(i=0;i<itemset.qty;i++){
console.log('Updating:' + itemset.item[i])
db.User.update(
//Criteria
{
_id: userId,
inv: {item: itemset.item[i]}
},
{
$set:
{
inv:
{
'$item': itemset.item[i],
$inc: {'$iqty': itemset.item_count[i]}
}
}
},
{upsert:true},
function(err,i)
{
console.log('Error: ' + err)
console.log('Db: ' + i)
}) //End Update()
}
}
这在语法意义上有效,但它永远不会更新数据......
我还想看看是否有办法在没有 for 循环和多个 db 调用的情况下做到这一点。