Może być pytanie, wygląda jak duplikat, ale przepraszam za to. Ponieważ nasza sprawa biznesowa jest inna niż istniejące pytanie.

Używamy nodejs i mongodb do pisania API reszty.

Mam kolekcję o nazwie: emplog z następującym obiektem dokumentu.

{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dp"),
    "staffId" : 12345,
    "category" : "trend",
    "page_route" : "http://example.com/rer",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5de"),
    "staffId" : 12346,
    "category" : "incident",
    "page_route" : "http://example.com/rergfhfhf",
    "expireAt" : ISODate("2020-08-12T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dc"),
    "staffId" : 12347,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dr"),
    "staffId" : 12348,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-12T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}

Odbieramy dane wejściowe jako kategoria i Utworzono użytkownika. Urektat odbiera bez czasu.

Załóżmy, że użytkownik dostarcza kategorii jako trend i stworzony jako 2020-08-13 , wówczas musimy grupować przez trend , Urestedat i Staffid i zwróć Staffid jako tablicę.

Uwaga: kategoria i utworzona otrzyma dynamiczny / wykonawczy od użytkownika.

Oczekiwany wynik to: {data:{staffIds:[12345,12347]}}

Jeśli ktoś może mnie poprowadzić, to będzie świetna pomoc.

Z góry dziękuję wszystkim ekspertom.

1
Pramod Kharade 16 wrzesień 2020, 13:35

1 odpowiedź

Najlepsza odpowiedź

Możesz spróbować dopasować dany category i createdAt - data przy użyciu $match, a następnie grupę i wreszcie użyj $addToSet, aby uzyskać unikalny staffId s:

db.collection.aggregate([
  {
    $match: {
      "category": "trend",
      "createdAt": {$gte: new Date("2020-08-13T00:00:00Z"), $lt: ISODate("2020-08-14T00:00:00Z")}
    }
  },
  {
    "$group": {
      "_id": null,
      "staffIds": {
        "$addToSet": "$staffId"
      }
    }
  }
]);

Oto przykład na MongOplayground (musiał używać ciągów i regex na datę, gdy Isodate nie jest tam obsługiwane): HTTPS: / /mongOplayground.net/p/ogm7cfcrqx.

1
eol 16 wrzesień 2020, 11:24