これがうまくいかない理由がわからないので、構文のバリエーションをいくつか試してみましたが、うまくいきませんでした。また、for ループ内で更新を行うことが適切かどうかもわかりません。
基本的に、次のような 2 つの配列 (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
目標は、アイテムが存在する場合はユーザーの在庫アイテムの数量を追加し続けること、存在しない場合は (数量と共に) 追加することです。したがって、2 つの更新された例を使用すると、ユーザーは、両方とも関数を通過した後、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 ループと複数の db 呼び出しを使用せずにこれを行う方法があるかどうかも確認したいと思います。