2013-03-21 149 views
2

我的数据结构为:更新所有嵌套数组中蒙戈对象

{ 
    "_id": { "$oid" : "511D0A0EC075F3FF25000003" }, 
    "progresses": [ 
    { 
     "behavior": { 
     "behavior": { 
      "_id": "511d052f52fbf0fd25000002", 
      "disabled": false, 
      "name": "Unity Installed", 
      "key": "UnityInstalled", 
      "points": 1, 
      "timeout": 0 
     }, 
     "key": "UnityNotInstalled", 
     "name": "Unity Not Installed", 
     "points": 1, 
     "timeout": 0, 
     "disabled": false, 
     "_id": { "$oid" : "511D056552FBF0FD25000003" } 
     }, 
     "behaviorCount": 1, 
     "behaviorParameter": null, 
     "userId": null, 
     "modifiedAt": { "$date": 1360857614000.000000 }, 
     "createdAt": { "$date": 1360857614000.000000 }, 
     "behaviorType": "user" 
    }, 
    { 
     "behavior": { 
     "behavior": { 
      "_id": "511cfac4955737a01f000001", 
      "disabled": false, 
      "name": "test", 
      "key": "tt", 
      "points": 1, 
      "timeout": 0 
     }, 
     "name": "Unity Installed", 
     "key": "UnityInstalled", 
     "points": 1, 
     "timeout": 0, 
     "disabled": false, 
     "_id": { "$oid" : "511D052F52FBF0FD25000002" } 
     }, 
     "behaviorCount": 3, 
     "behaviorParameter": null, 
     "userId": null, 
     "modifiedAt": { "$date": 1360858565000.000000 }, 
     "createdAt": { "$date": 1360858553000.000000 }, 
     "behaviorType": "user" 
    }, 
    { 
     "behavior": { 
     "behavior": { 
      "_id": "511d052f52fbf0fd25000002", 
      "disabled": false, 
      "name": "Unity Installed", 
      "key": "UnityInstalled", 
      "points": 1, 
      "timeout": 0 
     }, 
     "name": "Active User", 
     "key": "ActiveUser", 
     "points": 1, 
     "timeout": 0, 
     "disabled": false, 
     "_id": { "$oid" : "511D058E52FBF0FD25000004" } 
     }, 
     "behaviorCount": 1, 
     "behaviorParameter": null, 
     "userId": null, 
     "modifiedAt": { "$date": 1360858565000.000000 }, 
     "createdAt": { "$date": 1360858565000.000000 }, 
     "behaviorType": "user" 
    }, 
    { 
     "behavior": { 
     "behavior": { 
      "_id": "511d058e52fbf0fd25000004", 
      "disabled": false, 
      "name": "Active User", 
      "key": "ActiveUser", 
      "points": 1, 
      "timeout": 0 
     }, 
     "name": "Invite Count", 
     "key": "InviteCount", 
     "points": 1, 
     "timeout": 0, 
     "disabled": false, 
     "_id": { "$oid" : "511D061752FBF0FD25000006" } 
     }, 
     "behaviorCount": 1, 
     "behaviorParameter": null, 
     "userId": null, 
     "modifiedAt": { "$date": 1360858587000.000000 }, 
     "createdAt": { "$date": 1360858587000.000000 }, 
     "behaviorType": "user" 
    } 
    ], 
    "trophyAchievements": [ 

    ], 
    "userId": "asfasd" 
} 

我要更新所有progresses.behaviorCount 1。我怎么能这样做呢?

回答

1

您应该使用mongo的positional operator和点符号。

在你的情况,我会用水木清华这样的:

db.test.update({}, {$set: {"progresses.$.behaviorCount": "testing"}}, { multi: true }) 

但是,它不会嵌套数组中更新的所有字段,只是一次一个。

查看类似的问题:

作为一种变通方法,可以在嵌套数组循环和更新behaviorCount一个在由索引的时间。

希望有所帮助。

0

这个脚本是答案:

var i = 0; 
db.users.find().forEach(function(doc) { 
    doc.progresses.forEach(function(progress) { 
     progress.behaviorCount = 1; 
    }); 

    db.users.save(doc); 
    if (i % 10000 == 0) print(i); 
    i++; 
});