2011-10-19 5 views
2

私はCodeigniterとAlex BilbieのMongoDBライブラリを使用しています。 私のAPIでは、ユーザーを開発して画像をアップロードでき、他のユーザーがコメントを付けることができます。 コメントを画像にサブ文書として含めることを選択しました。MongoDBを使用した複数のアトミック更新?

各コメントが含まれています(作者の)

  • フルネーム
  • コメント
  • のcreated_atつまりそう

。ユーザーのフルネームは各コメントに「ハードコード」されていますので、後で の名前を変更すると問題が発生します。

アトミック更新を使用してコメントのような名前のすべての更新を行うことができますが、Alexのライブラリを使用してこれを行うにはどうすればよいですか?名前が間違っている場所をすべて更新できますか?

UPDATE

これは、画像、文書がコメントをどのように見えるかです。 MongoDBはサブ文書の使用を推奨していますが、配列内の複数の項目を更新する方法は含まれていません。

{ 
    "_id": ObjectId("4e9ead773dc793dc01020000"), 
    "description": "An image", 
    "category": "accident", 
    "comments": [ 
     { 
      "id": ObjectId("4e96bd063dc7937202000000"), 
      "fullname": "James Bond", 
      "comment": "This is a comment.", 
      "created_at": "2011-10-19 13:02:40" 
     } 
    ], 
    "created_at": "2011-10-19 12:59:03" 
} 

ありがとうございました!

答えて

1

私はcodeignitorに慣れていないけど、メガバイトのMongoDBのシェル構文がお手伝いします:

db.comments.update({"Fullname":"Andrew Orsich"}, 
        { $set : { Fullname: "New name"} }, false, true) 

最終trueフラグを使用すると、複数のドキュメントを更新したいことを示しています。したがって、1回の更新操作ですべてのコメントを更新することは可能です。

BTW:一般的にmongodbとnosqlのdenormalazing(ハードコーディングではない)データが通常の操作です。また、多くのドキュメントの更新が必要な操作では、通常、非同期で動作します。しかしそれはあなた次第です。

更新:

db.comments.update({"comments.Fullname":"Andrew Orsich"}, 
        { $set : { comments.$.Fullname: "New name"} }, false, true) 

しかし、クエリの上にネストされた配列の最初のコメントにフルネームを更新します。複数の配列要素の変更に影響を与える必要がある場合は、複数の更新文を使用する必要があります。

+0

ありがとうございます!私は例を使って質問を更新しました。 IDを使用してその構造にアクセスしてコメントを変更するにはどうすればよいですか? –

関連する問題