2012-06-29 5 views
5

ここに私が何をしようとしているかの例があります。MongoDBの辞書に別の値を追加するにはどうすればいいですか?

私はこれをmongo CLI:db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []})で実行します。私がしたいのは、そのエントリを更新してcomments辞書にコメントを追加することです。

db.posts.update()を使用してこれを達成するにはどうすればよいですか?以下のようなオブジェクトの場合

+0

私は質問を編集して「本当の質問」にしました。これでもあなたの基準を満たしていない場合は、問題点を教えてください。 –

+0

要素を配列に追加するには、$ pushまたは$ addToSetのいずれかが必要です:http://www.mongodb.org/display/DOCS/Updating – matulef

答えて

-2

{ 
    name: "Hello, world!", 
    content: "This is my first post" 
} 

あなたが今

db.posts.update({name: "Hello, world!"}, {name: "First post"}); 

を実行する場合、これは、結果がどうなるかです:

{ 
    title: "First post" 
} 

コンテンツ属性がありとして削除されます代替値は提供されていません。 これは一般的なエラーであるため、これについて言及しています。

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

$のプッシュが使用されますが、配列にデータを追加している場合:

だから、あなたが属性を「追加」したい場合は、実行する必要があります。通常のフィールドで$ setを使用している場合。

参考:http://www.mongodb.org/display/DOCS/Updating

6

OPの質問と例が一致していません。彼は実際に文書内の配列にフィールドを挿入したいと思っています。つまり、

という意味です。

ただし、値またはサブ文書を辞書に追加する場合は、$setコマンドを使用します。このドキュメントを例に挙げてください:を追加したいとします。これは、同様にサブ文書の挿入で動作しますので、我々は、元の例を変更できること

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10, 
     "apples: 2 
    } 
} 

注:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     } 
    } 
} 

コマンドは

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": 2}}); 

あなたの文書は、次にようになりますでしょうそして4つのおばあちゃんスミスリンゴと8つのフジリンゴを入れましょう。

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}}); 

当社のドキュメントには、今のようになります。

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     }, 
     "apples": { 
      "fuji": 8, 
      "granny smith": 4 
     } 
    } 
} 

一つの最後のコメント:サブドキュメントまたはフィールドがすでに存在する場合、それは$setコマンドによって上書きされますので注意してください。

関連する問題