2017-11-29 6 views
0

このオブジェクトのみ返すことができモンゴDBにJSONオブジェクトです:は、どのように私はモンゴDBにステータス1を持っているパラメータ

{ 
    "_id": ObjectId("5a1e50efcb4ecdfe9b41d097"), 
    "ProjectId": NumberInt(1), 
    "TicketId": NumberInt(64), 
    "Artifacts": [ 
    { 
     "Slug": ObjectId("5a1e50e6a3d5592b583ec566"), 
     "UploadedOn": ISODate("2017-11-29T06:17:10.0Z"), 
     "UploadedBy": NumberInt(6), 
     "Status": NumberInt(1), 
     "ArtifactType": "image", 
     "isThumbnailExist": NumberInt(0), 
     "ThumbnailPath": "/files/story/thumbnails", 
     "FileName": "7b179efffd03e92e495b802c24d3f357-B1", 
     "OriginalFileName": "B1.png", 
     "Extension": "png" 
    }, 
    { 
     "Slug": ObjectId("5a1e515aa3d5592b583ec56a"), 
     "UploadedOn": ISODate("2017-11-29T06:19:06.0Z"), 
     "UploadedBy": NumberInt(6), 
     "Status": NumberInt(0), 
     "ArtifactType": "image", 
     "isThumbnailExist": NumberInt(0), 
     "ThumbnailPath": "/files/story/thumbnails", 
     "FileName": "b83f3aa5d741fb18f1d527757cc002d2-B2", 
     "OriginalFileName": "B2.png", 
     "Extension": "png" 
    } 
    ] 
} 

私はそのArtifacts.Statusが1あるレコードのみを取得したいです!

どうすればいいですか?私はSQLを初めて使っています。

これが私のmongoクエリ機能である:これは、アグリゲーションパイプラインを使用して行うことができ

{ 
    "_id": ObjectId("5a1e50efcb4ecdfe9b41d097"), 
    "ProjectId": NumberInt(1), 
    "TicketId": NumberInt(64), 
"Artifacts": [ 
    { 
     "Slug": ObjectId("5a1e50e6a3d5592b583ec566"), 
     "UploadedOn": ISODate("2017-11-29T06:17:10.0Z"), 
     "UploadedBy": NumberInt(6), 
     "Status": NumberInt(1), 
     "ArtifactType": "image", 
     "isThumbnailExist": NumberInt(0), 
     "ThumbnailPath": "/files/story/thumbnails", 
     "FileName": "7b179efffd03e92e495b802c24d3f357-B1", 
     "OriginalFileName": "B1.png", 
     "Extension": "png" 
    } 
    ] 
} 

答えて

1

:(NumberInt(1)"ステータス" ので:)

public static function getACtiveArtifacts($projectId, $ticketId) { 
    try{ 
    $query = new Query(); 
$query->from('TicketArtifacts') 
     ->select(array("Artifacts")) 
     ->where(['TicketId' => (int) $ticketId, "ProjectId" => (int) $projectId]); 
$ticketArtifactsDetails = $query->one(); 
return $ticketArtifactsDetails; 
} catch (\Throwable $ex) { 
    Yii::error("TicketArtifactsCollection:getTicketArtifacts::" . $ex->getMessage() . "--" . $ex->getTraceAsString(), 'application'); 
    throw new ErrorException($ex->getMessage()); 
} 
} 

マイ期待される結果結果を得るには$unwind$matchを使用してください。

モンゴシェルクエリ

db.collection.aggregate([ 
    {$unwind:"$Artifacts"}, 
    {$match:{"Artifacts.Status":1}} 
]) 

我々は適用することで、後に続い

{ 
     "_id" : ObjectId("5a1e50efcb4ecdfe9b41d097"), 
     "ProjectId" : 1, 
     "TicketId" : 64, 
     "Artifacts" : { 
       "Slug" : ObjectId("5a1e50e6a3d5592b583ec566"), 
       "UploadedOn" : ISODate("2017-11-29T06:17:10Z"), 
       "UploadedBy" : 6, 
       "Status" : 1, 
       "ArtifactType" : "image", 
       "isThumbnailExist" : 0, 
       "ThumbnailPath" : "/files/story/thumbnails", 
       "FileName" : "7b179efffd03e92e495b802c24d3f357-B1", 
       "OriginalFileName" : "B1.png", 
       "Extension" : "png" 
     } 
} 
{ 
     "_id" : ObjectId("5a1e50efcb4ecdfe9b41d097"), 
     "ProjectId" : 1, 
     "TicketId" : 64, 
     "Artifacts" : { 
       "Slug" : ObjectId("5a1e515aa3d5592b583ec56a"), 
       "UploadedOn" : ISODate("2017-11-29T06:19:06Z"), 
       "UploadedBy" : 6, 
       "Status" : 0, 
       "ArtifactType" : "image", 
       "isThumbnailExist" : 0, 
       "ThumbnailPath" : "/files/story/thumbnails", 
       "FileName" : "b83f3aa5d741fb18f1d527757cc002d2-B2", 
       "OriginalFileName" : "B2.png", 
       "Extension" : "png" 
     } 
} 

と以下のように書類になりますアーティファクトを巻き戻すために私たちのコレクションに集約パイプラインの$のアンワインドを適用すると$は条件Artifacts.Status:1と一致し、最終結果が得られます。

{ 
     "_id" : ObjectId("5a1e50efcb4ecdfe9b41d097"), 
     "ProjectId" : 1, 
     "TicketId" : 64, 
     "Artifacts" : { 
       "Slug" : ObjectId("5a1e50e6a3d5592b583ec566"), 
       "UploadedOn" : ISODate("2017-11-29T06:17:10Z"), 
       "UploadedBy" : 6, 
       "Status" : 1, 
       "ArtifactType" : "image", 
       "isThumbnailExist" : 0, 
       "ThumbnailPath" : "/files/story/thumbnails", 
       "FileName" : "7b179efffd03e92e495b802c24d3f357-B1", 
       "OriginalFileName" : "B1.png", 
       "Extension" : "png" 
     } 
} 
1

あなたは$redact集約の段階を使用することができます。

MongoDBの集計クエリ:

db.collection.aggregate([ 
    { 
     $match: {"ProjectId":1} 
    }, 
    { 
     $redact: { 
      $cond: { 
       if: { $eq: ["$Status", 1] }, 
       then: "$$PRUNE", 
       else: "$$DESCEND" 
      } 
     } 
    } 
]) 

P.S.申し訳ありませんが、私はYiiフレームワークでコード化していませんので、最終的なコードを提供することはできません。

関連する問題