2016-12-29 129 views
0

我有下面的數據存儲在我的分貝。批量更新數據到mongodb

[ 
    { 
     date:'1-1-2016', 
     users:[ 
      { 
       'name':'james', 
       'age':18 
      }, 
      { 
       'name':'alice', 
       'age':20 
      } 
     ] 
    }, 
    { 
     date:'2-1-2016', 
     users:[ 
      { 
       'name':'james', 
       'age':18 
      }, 
      { 
       'name':'alice', 
       'age':20 
      }, 
      { 
       'name':'xiaomi', 
       'age':29 
      } 
     ] 
    } 
] 

我有一個挑戰,批量更新對象數組有效。

我最初的解決方案,在單個集合更新是

Users.update({date:'1-1-2016','user.name':'james'},{'$set':'users.$.age':5}}) 

因此,這將更新詹姆斯的年齡從5 18,日期和用戶名基地。

但是如何批量更新,說給出了一個日期範圍?使用循環與上面的查詢?我認爲這不是有效的。需要指導。

回答

2

您可以使用$gte/$gt$lte/$lt匹配日期範圍:與許多情侶的條件名稱/年齡

db.users.update({ 
    date: { 
     $gte: '1-1-2016', 
     $lt: '31-1-2016' 
    }, 
    'users.name': 'james' 
}, { '$set': { 'users.$.age': 10 } }, { 'multi': true }) 

要批量更新:

var data = [{ "name": "james", "age": 10 }, { "name": "alice", "age": 11 }]; 

var query = []; 

for (var i = 0; i < data.length; i++) { 

    query.push({ 
     updateMany: { 
      "filter": { 
       date: { 
        $gte: '1-1-2016', 
        $lt: '31-1-2016' 
       }, 
       'users.name': data[i].name 
      }, 
      "update": { '$set': { 'users.$.age': data[i].age } } 
     } 
    }) 
} 

db.users.bulkWrite(query); 
+0

如果1-什麼1-2016我想將詹姆斯的年齡設置爲10歲,2-1-2016年我想將詹姆斯的年齡設置爲11歲等等。這不是日期範圍對不起,我錯過了解釋。它是幾個不同日期的批量更新數據。 –

+0

我已經更新'bulkWrite'來執行幾個'updateMany'基於動態配置名稱/年齡 –

+0

這正是我以前所做的。但是你的邏輯有缺陷,如果用戶選擇了1-1-2016,4-1-2016和1-2-2016,該怎麼辦? –