在for循环中upserting子文档

时间:2013-04-28 18:47:25

标签: node.js mongodb mongoose upsert

不确定为什么这不起作用,我尝试了一些不同的语法变体,但没有去。我也不确定在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)。

USER的架构是:

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循环的情况下做到这一点。多个数据库调用。

0 个答案:

没有答案