mam pewne dokumenty w Mongo, która wygląda mniej więcej tak:MongoDB kruszywo ciągu codziennej ugrupowania
{
_id : ObjectId("..."),
"make" : "Nissan",
..
},
{
_id : ObjectId("..."),
"make" : "Nissan",
"saleDate" : ISODate("2013-04-10T12:39:50.676Z"),
..
}
Idealnie chciałabym móc liczyć, według marki, liczba sprzedanych pojazdów dziennie. Chciałbym zobaczyć dzisiaj albo takie okno jak dziś przez ostatnie siedem dni.
udało mi się zrealizować codzienny widok z jakiegoś brzydkiego kodu
db.inventory.aggregate(
{ $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z") } } } ,
{ $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
które następnie daje wyniki
{
"result" : [
{
"_id" : {
"make" : "Nissan",
"saleDayOfMonth" : 10
},
"cnt" : 2
},
{
"_id" : {
"make" : "Toyota",
"saleDayOfMonth" : 10
},
"cnt" : 4
},
],
"ok" : 1
}
tak, że jest w porządku, ale byłoby znacznie wolą nie mieć do zmian dwie wartości datetime w zapytaniu. Następnie, jak wspomniałem powyżej, chciałbym móc uruchomić tę kwerendę (ponownie, bez konieczności modyfikowania jej za każdym razem) i zobaczyć te same wyniki w ciągu dnia w ciągu ostatniego tygodnia.
No i oto przykładowe dane używam dla zapytania
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T12:39:50.676Z")});
db.inventory.save({"make" : "Nissan"});
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-09T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:38:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:37:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:36:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:35:50.676Z")});
góry dzięki, Kevin
Jakie jest znaczenie 676Z? –
Po prostu aktualizacja (od 2017, wow to pytanie jest stare ..), zmieniłem zaakceptowaną odpowiedź, ponieważ ramy Mongo ewoluowały, aby rozwiązać to znacznie łatwiej. Mimo to Asya odpowiada za jej oryginalną odpowiedź. @AboozarRajabi, "676Z" jest opcjonalną częścią formatu czasu [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601), w tym przypadku "676Z" reprezentuje dwie części 2013-04-10T11: 35: 50.676Z, pierwsze 676 to milisekundy, a "Z" to skrót oznaczający strefę czasową UTC. – Kevin