2

私のコレクションはこんな感じです

{
 _id :"",
 name:[
  {
   firstName:"",
   lastName:"",
  }
 ]
}

ドキュメントで一致する firstName を見つける必要があります。クエリでこれを達成する方法は? 私はmongodbが初めてです。

4

3 に答える 3

2

@Sushant Guptaは正しい答えを提供しましたが、次のこともできると言って、もう少しフレーバーを追加します。

db.collection.find({'name.firstName': 'Raj'}, {'name.$':1})

宛先: matching firstName in the documents

この背後にある鍵は、MongoDB がドキュメント内の単一の複数キーの出現を通常のフラット フィールドのように扱い、このようにクエリを実行できるようにすることです。

表示される 2 番目のパラメーターは、実際にはプロジェクション ( http://docs.mongodb.org/manual/reference/projection/elemMatch/ ) であり、基本的に FIRST を投影するように MongoDB に指示します (さらに必要な場合は、集計フレームワークを使用する必要があります)。 ) メインのサブドキュメントに一致するnameサブドキュメント。

次のように 2 つ以上のマルチキー フィールドを追加する場合は注意してください。

db.collection.find({'name.firstName': 'Raj', 'name.lastName': ''}, {'name.$':1})

$elemMatchただし、このような小さな単一フィールド クエリや、ドキュメント内のすべてのマルチキー フィールドを 2 つの値で意図的に検索する場合、ドット表記 ( http://docs.mongodb.org/manual/reference )を使用する必要があります ( http://docs.mongodb.org/manual/reference /glossary/#term-dot-notation ) はうまく機能します。

于 2013-04-18T11:30:49.937 に答える
2
db.collection.find({name: {$elemMatch: {firstName: "Raj"}}});

詳細については、ドキュメントを参照してください。$elemMatch

于 2013-04-18T10:50:28.733 に答える
0

これがあなたの問題を解決するものです:

db.MyCollection.find(  { name : { $elemMatch: { firstName : "valueGoesHere"} } } )
于 2013-04-18T11:12:33.880 に答える