2017-11-20 11 views
2

これは私が組織によってすべての問題のグループを選択したいと私は、ソートを実装したい、制限し、それらのデータのスキップ(サブアレイの問題のデータのみ上から)私のデータ構造以下に示す集計クエリでsort、limit、およびskipを追加する方法はありますか?

{ 
    "_id" : ObjectId("57f37f18517f72bc09ee7632"), 
    "name" : "testdata", 
    "createdBy" : "57f1fdef1d3c40141617d215", 

    "transitionEnabled" : false, 
    "status" : "active", 
    "createdDateTime" : ISODate("2016-10-04T10:06:16.195Z"), 
    "accounts" : [ 
     "57f37f75517f72bc09ee7634" 
    ], 
    "deliverables" : [], 
    "risks" : [], 
    "issues" : { 
     "_id" : ObjectId("57f38398517f72bc09ee7680"), 
     "title" : "test", 
     "description" : "Delay in testing due to issues with Provider Finder dataload in the test region. This has impacted the production release planned for Sep 30th", 
     "plannedStartDate" : ISODate("2016-09-01T00:00:00.000Z"), 
     "plannedEndDate" : ISODate("2016-10-30T00:00:00.000Z"), 
     "assignedTo" : "57f375ea517f72bc09ee762a", 
     "createdBy" : ObjectId("57f375ea517f72bc09ee762a"), 
     "likes" : 0, 
     "createdDateTime" : ISODate("2016-10-04T10:25:28.301Z"), 
     "status" : "open", 
     "stakeholders" : [], 
     "__v" : 0, 
     "lastUpdatedTime" : ISODate("2019-11-15T09:19:06.279Z") 
    }, 
    "__v" : 0 
} 

です。そのために私は次のように私は結果を取得しています次のコード

db.organizations.aggregate([ { "$lookup" : { "from" : "issues", "localField" : "issues.str", "foreignField" : "_id.str", "as" : "issues" } }, {$sort: {weight: -1, "issues.lastUpdatedTime": 1}} { $group: { _id: "$issues", }, }, ])

を試してみました。

enter image description here以下のクエリの制限とスキップをソートして設定する方法はありますか?クエリによって返された結果も添付されます。

しかし、私は上記の結果に示されている外側の_idフィールドは必要ありません。この問題を解決するために私を助けてください。

+0

余分な情報を表示する必要はありません。あなたが持っているものとあなたが望むものをイメージの代わりに表示する必要はありません。説明は、https://stackoverflow.com/questions/38612972/how-to-merge-two-array-of-object-by-using-lodash –

答えて

1

最初$skip$limit anfterを使用する必要がありますソート、スキップ、リミットを適用することが可能

1

フィールドissues.lastUpdatedTimeのためsortが機能しません。issuesは、平文オブジェクトではない$lookupの後のオブジェクトの配列であるためです。だから$unwindを最初に適用する必要がありますsort sortの後にskiplimitを使用してください。以下のような

{$unwind:"$issues"}, 
{$sort: {weight: -1, "issues.lastUpdatedTime": 1}}, 
{ $skip: 10 },// set value as you need 
{ $limit : 50 }// set value as you need 

NB:$limitは常にaggregationため$skipた後でなければなりません。そのコードは

db.organizations.aggregate([ 
    { 
    "$lookup": { "from": "issues", "localField": "issues.str", "foreignField": "_id.str", "as": "issues" } 
    }, 
    {$unwind:"$issues"}, 
    {$sort: {weight: -1, "issues.lastUpdatedTime": 1}}, 
    {$skip: 10}, 
    {$limit: 50} 
]); 

NBのようになります:あなたは、グループ化した後、文書の一定量を返すようにしたいなら、あなたは$の問題にサブアレイをほどくと、その結果を使用して$group段階

+0

のようにすることができますそれは動作していない – vijesh

+0

が動作する必要があります。どのような間違ったデータを取得していますか? –

+0

このクエリを実行した後に、データの順序がlastUpdatedTimeでなく、レコード全体が表示されていました。スキップとリミットも機能しません。常にデータ全体を表示 – vijesh

関連する問題