2017-01-03 3 views
1

私はMongoを初めて利用していますので、どんな助力にも感謝します。MongoDBから具体的な値を取得

私はUserオブジェクトを持っていて、それに複数のオブジェクトがあります。これらのオブジェクトは、ユーザーとそれぞれの相互作用に基づいてクライアントデータをホストしています。

これは、あなたが私のクエリから見ることができるように、それはクライアント35からのデータを持っているユーザーを返すだけでなく、他のすべてのクライアントからのデータを返す

db.users.findOne(
    {"clients.clientId":35}, 
    {"clients.clientId":1} 
) 
{ 
    "_id" : ObjectId("586670e6ce9287cf6d197d14"), 
    "clients" : [ 
     { "clientId" : 35 }, 
     { "clientId" : 67 }, 
     { "clientId" : 73 }, 
     { "clientId" : 78 }, 
     { "clientId" : 82 } 
    ] 
} 

のように、それがどのように見えるかです。

クライアント35からのデータのみにアクセスするにはどうすればよいですか?

+3

これを試してみてください。db.users.findOne({"clients.clientId":35}、{"clients。$":1}) ' – Veeram

+0

@SagarReddyあなたは何を提案したか説明できますか?クライアントは何ですか? – Geo

+2

docs.mongodb.com/manual/reference/operator/update/positional。クエリ部分は行を識別し、プロジェクト部分は$位置演算子を使用して一致した値を表示します – Veeram

答えて

2

clientsキーに文書が埋め込まれています。

クエリプロジェクション{"clients.clientId":1}は、クエリがそのキー、clientsキーのみを返すように指定しています。 clientsフィールドは配列なので、配列のすべての埋め込みドキュメントが抽出(投影)されます。

db.users.findOne({"clients.clientId":35},{"clients.$":1}) 

結果:

{ 
    "_id" : ObjectId("586670e6ce9287cf6d197d14"), 
    "clients" : [ 
     { 
      "clientId" : 35 
     } 
    ] 
} 
あなたが表示されるように、アレイに一つだけの要素が欲しい

は、ID 35 {"clients.clientId":35}とクライアント、つまりクエリで定義された一つは、projection positional operator $を使用する必要があります

注:$演算子を使用すると、クエリに一致する配列内の最初の要素のみが投影されます。配列内に同じ値を持つドキュメントがさらにある場合は、最初のものだけが表示されます。

+0

私は同じドキュメントの下でクライアント35に関するすべてを持っています。それは大丈夫でしょうか? – Geo

+0

はいいいです – sergiuz

関連する問題