агрегат mongodb, групповой список в объекте - PullRequest
0 голосов
/ 14 ноября 2018

Я смотрю на выполнение группы по заданному значению в объекте гнезда.Например, моя структура документа выглядит следующим образом: (извините за ограниченные данные)

"_id" : "92623ba7-4ca5-46c7-8d76-c4bc8387ea00",
    "Status" : 2.0,
    "UploadDate" : ISODate("2018-10-30T12:01:19.619Z"),
    "UpdateDate" : ISODate("2018-10-30T12:01:19.619Z"),
    "Request" : "abc123",
    "ShowCaseHtml" : "",
    "PageResult" : [ ],
    "ProductFilter" : {
     "_id" : "9430fb88-2deb-4508-8422-dd67c3a35205",
        "Status" : 2,
        "UploadDate" : ISODate("2018-11-05T10:52:37.122Z"),
        "UpdateDate" : ISODate("2018-11-05T10:52:37.122Z"),
        "ProductPageType" : 0,
        "Categories" : [ ],
        "PriceRanges": [ ],
        "Brands" : [ ],
        "Sellers": [ ],
        "StarRatings" : [ ],
  },
        "BreadCrumbs"[ ]        

В результате моего запроса возвращается только часть объекта, мне нужен полный объект, но версия с фильтром, вот мояquery

db.getCollection('dbName').aggregate(
    {$match: {"Request": "abc123"}},
    {$project : 
    {"PageResult":1,"ProductFilter":1,"BreadCrumbs":1,"ShowCaseHtml":1}},
    {$unwind: "$PageResult"},
    {$sort:{'PageResult.MarketPlaceProductPrice.ProductPrice':1}},
    {$skip: 2},
    {$limit: 3},
    {$group: {"_id": "$_id", "PageResult": {$push: "$PageResult"}}},
    {$project : 
    {"PageResult.MarketPlaceProductPrice.ProductPrice":1,"_id":0}}
   )

Результат запроса:

{
    "PageResult" : [ 
        {
            "MarketPlaceProductPrice" : {
                "ProductPrice" : 1519.00
            }
        }, 
        {
            "MarketPlaceProductPrice" : {
                "ProductPrice" : 2749.00
            }
        }, 
        {
            "MarketPlaceProductPrice" : {
                "ProductPrice" : 3359.00
            }
        }
    ]
}

Мне также нужны области ProductFilter, BreadCrumbs и ShowCaseHtml, поэтому я указал

{$project : 
        {"PageResult":1,"ProductFilter":1,"BreadCrumbs":1,"ShowCaseHtml":1}}

но я только отфильтровал область PageResult, есть идеи?

1 Ответ

0 голосов
/ 19 ноября 2018

Использование этого запроса решило мою проблему

   db.getCollection('dbName').aggregate(
    {$match: {"Request":"abc123"}},
    {$project : {"PageResult":1,"ProductFilter":1,"BreadCrumbs":1,"ShowCaseHtml":1}},
    {$unwind: "$PageResult"},
    {$sort:{'PageResult.MarketPlaceProductPrice.ProductPrice':1}},
    {$skip: 2},
    {$limit: 3},
    {$group: {"_id": {"Request":"$Request","ProductFilter":"$ProductFilter","BreadCrumbs":"$BreadCrumbs","ShowCaseHtml":"$ShowCaseHtml"},"PageResult": {$push : "$PageResult"}
  }}
 )
...