4

この質問に似ています

データセットを絞り込んで、私はこれに似たものを持っています:

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
            }
        ]
}

campaignsそして、私は次のよう に新しいキーを追加したいと思います:

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
                'worker_id': '00000'
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
                'worker_id': '00000'
            }
        ]
}

insert/updateオブジェクトの配列に新しいキーを設定するにはどうすればよいですか?
配列内のすべてのオブジェクトにデフォルト値の新しいキーを追加したいと思います00000

私が試してみました:
db.test.update({}, {$set: {'campaigns.worker_id': 00000}}, true, true)
db.test.update({}, {$set: {campaigns: {worker_id': 00000}}}, true, true)

助言がありますか?

4

2 に答える 2

2

この操作は 1 回だけ行われると想定しているため、スクリプトを使用して処理できます。

var docs = db.test.find();
for(var i in docs) {
    var document = docs[i];

    for(var j in document.campaigns) {
        var campaign = document.campaigns[j];
        campaign.worker_id = '00000';
    }

    db.test.save(document);
}

スクリプトは、コレクション内のすべてのドキュメントを反復処理し、次に各ドキュメント内のすべてのキャンペーンを反復処理して、*worker_id* プロパティを設定します。最後に、各ドキュメントが永続化されます。

于 2012-12-21T10:48:34.933 に答える
1
db.test.update({}, {$set: {'campaigns.0.worker_id': 00000}}, true, true

これにより、0 要素が更新されます。

必要に応じて、add a new key into every object inside the array次を使用する必要があります。 $unwind

例:

{
  title : "this is my title" ,
  author : "bob" ,
  posted : new Date() ,
  pageViews : 5 ,
  tags : [ "fun" , "good" , "fun" ] ,
  comments : [
      { author :"joe" , text : "this is cool" } ,
      { author :"sam" , text : "this is bad" }
  ],
  other : { foo : 5 }
}

タグの巻き戻し

db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);

結果:

{
     "result" : [
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "fun"
             },
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "good"
             },
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "fun"
             }
     ],
     "OK" : 1
}

簡単な更新クエリを記述した後。

于 2012-12-21T09:13:49.650 に答える