0

ここで何が欠けているのか教えてください:

これは私が作成したドキュメントです:

 fatDoc = {
 name: "Babak",
 personID : 555,
 email : "babak@babak.name",
 music : ["pink floyd", "muse", "garfunkel"],
 food : ["free food", "yummy food", "mom food"],
 addresses:
   [ { type: "home",
       street: "123 Main",
       state: "NY",
       city: "brooklyn"
    },
    { type: "vacation",
      street: "456 sunshine",
      state: "CA",
      city: "SanFran"
    }
  ]   
 }

これは私が実行したクエリです:

db.coolkids.find({"addresses.type" : "home"}, {addresses:1}).pretty()

質問1:このクエリの結果として両方のアドレスが返されるのはなぜですか?質問2:配列の2番目のメンバーではなく、「ホーム」アドレスである最初のドキュメントのみを返すように変更するにはどうすればよいですか?

4

1 に答える 1

1
  1. クエリがこのドキュメントと一致し、配列である「アドレス」フィールドが返されます。2.0では、完全な配列よりも少ない値を取得する唯一の方法は、$ slice演算子を使用することですが、必要な要素の位置を知る必要があります。

  2. クエリに一致する要素を1つだけ戻す方法は、新しいAggregation Framework(開発バージョン2.1で利用可能、2.2でリリースされる予定)を使用することです。

Aggregation Frameworkを使用すると、配列を「$ unwind」できるため、フィルターに一致する配列要素を含むドキュメントのみを取得できます。

于 2012-06-02T07:25:50.783 に答える