2012-03-13 5 views
1

私は1週間以来MongoDBを使用していましたが、私はそれを楽しんでいます!他のオブジェクトの中にあるオブジェクトを取得する

これまでのテストアプリケーションは、プロジェクトとマイルストーンとして構築しています。以下の構造を参照してください。

{ 
    "code": "test-project", 
    "milestones": [ 
    { 
     "name": "Test Milestone", 
     "code": "test-milestone" 
    }, 
    { 
     "name": "Test Milestone 2", 
     "code": "test-milestone-2" 
    } 
    ], 
    "name": "Test Project" 
} 

私はマイルストーンの編集フォームを作成しています。私は "Test Milestone 2"を編集しようと思います。だから、今まで私は関連プロジェクトを取得していて、関連するコレクションから適切なマイルストーンを選択しています。しかし、マイルストーンを直接入手する方法があるかどうかを知りたいですか? (私の場合)

もしそうなら、あなたは私にそれをどうするかの例を教えていただけますか?

ありがとうございます!

答えて

0

マイルストーンアレイをプロジェクト自体に埋め込みます。

今やっていることをやり続けてください。 (あなたはそれを間違っているわけではありません。それは単にそれの性質です)

+0

マイルストーンは私のプロジェクトに埋め込まれていますか?あなたが言っていることの例を私に見せてもらえますか?ありがとう! – TomShreds

1

これはまっすぐなクエリで行うことができます。 Positional Operatorを使用するだけです。

「テストマイルストーン2」を「テストマイルストーン2」に更新したいとします。

db.Projects.update({"milestones.name" : "Test Milestone 2"}, {$set : {"milestones.$.name" : "Test Milestone Two"}}) 

$があなたの元の配列の発見の場所(update文の最初の部分)を保持している:あなたは、次のクエリを実行することができます。これにより、変更したい配列の要素に直接ジャンプすることができます。

あなたはMongoDBを楽しんでいると聞いてうれしいです - それはかなり楽しいです。

+0

お返事ありがとうございます。しかし、別のプロジェクトに「テストマイルストーン2」というマイルストーンがあるとしたらどうでしょうか?あなたが私に与えた例では、これはすべてのプロジェクトのためのものです。ありがとう! – TomShreds

+1

私が与えたクエリは、「テストマイルストーン2」と一致するすべてのマイルストーンの名前を変更します。それが動作するにつれて、各Positional Operatorは、影響を受ける現在のドキュメントに適用されます。 1つだけに影響を与えたい場合は、更新ステートメントの最初の部分の条件を絞り込む必要があります。 – SethO

関連する問題