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 に更新したいのですが、どうすればできますか?

4

2 に答える 2

1

mongo の位置演算子とドット表記を使用する必要があります。

あなたの場合、私は次のようにsmthを使用します:

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

ただし、ネストされた配列内のすべてのフィールドが更新されるわけではなく、一度に 1 つずつ更新されます。

同様の問題を参照してください。

回避策として、ネストされた配列をループし、インデックスで一度に 1 つずつ更新できますbehaviorCount

それが役立つことを願っています。

于 2013-03-21T15:26:29.250 に答える
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++;
});
于 2013-03-22T02:00:11.083 に答える