Skip to content

Commit 47ce994

Browse files
authored
DOCSP-30546: Aggregation tech review (#48)
1 parent a1a0c3d commit 47ce994

File tree

1 file changed

+21
-21
lines changed

1 file changed

+21
-21
lines changed

source/includes/fundamentals/code-snippets/aggregation.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
use chrono::{ Utc };
2-
use mongodb::{ Client, Collection };
3-
use serde::{ Deserialize, Serialize };
1+
use bson::{doc, DateTime};
2+
use mongodb::{Client, Collection};
3+
use serde::{Deserialize, Serialize};
44

55
#[tokio::main]
66
async fn main() -> mongodb::error::Result<()> {
77
let uri: &str = "<connection string>";
88

9-
let client: Client = Client::with_uri_str(uri).await?;
9+
let client = Client::with_uri_str(uri).await?;
1010

1111
// begin-insert
1212
let my_coll: Collection<Document> = client.database("db").collection("site_users");
1313

1414
let docs = vec![
15-
doc! { "name": "Sonya Mehta", "age": 23, "genre_interests": vec!["fiction", "mystery", "memoir"], "last_active": Utc.with_ymd_and_hms(2019, 5, 13, 0, 0, 0).unwrap() },
16-
doc! { "name": "Selena Sun", "age": 45, "genre_interests": vec!["fiction", "literary", "theory"], "last_active": Utc.with_ymd_and_hms(2019, 5, 25, 0, 0, 0).unwrap() },
17-
doc! { "name": "Carter Johnson", "age": 56, "genre_interests": vec!["literary", "self help"], "last_active": Utc.with_ymd_and_hms(2019, 5, 31, 0, 0, 0).unwrap() },
18-
doc! { "name": "Rick Cortes", "age": 18, "genre_interests": vec!["sci-fi", "fantasy", "memoir"], "last_active": Utc.with_ymd_and_hms(2019, 7, 1, 0, 0, 0).unwrap() },
19-
doc! { "name": "Belinda James", "age": 76, "genre_interests": vec!["literary", "nonfiction"], "last_active": Utc.with_ymd_and_hms(2019, 6, 11, 0, 0, 0).unwrap() },
20-
doc! { "name": "Corey Saltz", "age": 29, "genre_interests": vec!["fiction", "sports", "memoir"], "last_active": Utc.with_ymd_and_hms(2019, 1, 23, 0, 0, 0).unwrap() },
21-
doc! { "name": "John Soo", "age": 16, "genre_interests": vec!["fiction", "sports"], "last_active": Utc.with_ymd_and_hms(2019, 1, 3, 0, 0, 0).unwrap() },
22-
doc! { "name": "Lisa Ray", "age": 39, "genre_interests": vec!["poetry", "art", "memoir"], "last_active": Utc.with_ymd_and_hms(2019, 5, 30, 0, 0, 0).unwrap() },
23-
doc! { "name": "Kiran Murray", "age": 20, "genre_interests": vec!["mystery", "fantasy", "memoir"], "last_active": Utc.with_ymd_and_hms(2019, 1, 30, 0, 0, 0).unwrap() },
24-
doc! { "name": "Beth Carson", "age": 31, "genre_interests": vec!["mystery", "nonfiction"], "last_active": Utc.with_ymd_and_hms(2019, 8, 4, 0, 0, 0).unwrap() },
25-
doc! { "name": "Thalia Dorn", "age": 21, "genre_interests": vec!["theory", "literary", "fiction"], "last_active": Utc.with_ymd_and_hms(2019, 8, 19, 0, 0, 0).unwrap() },
26-
doc! { "name": "Arthur Ray", "age": 66, "genre_interests": vec!["sci-fi", "fantasy", "fiction"], "last_active": Utc.with_ymd_and_hms(2019, 11, 27, 0, 0, 0).unwrap() }
15+
doc! { "name": "Sonya Mehta", "age": 23, "genre_interests": vec!["fiction", "mystery", "memoir"], "last_active": DateTime::builder().year(2019).month(5).day(13).build().unwrap() },
16+
doc! { "name": "Selena Sun", "age": 45, "genre_interests": vec!["fiction", "literary", "theory"], "last_active": DateTime::builder().year(2019).month(5).day(25).build().unwrap() },
17+
doc! { "name": "Carter Johnson", "age": 56, "genre_interests": vec!["literary", "self help"], "last_active": DateTime::builder().year(2019).month(5).day(31).build().unwrap() },
18+
doc! { "name": "Rick Cortes", "age": 18, "genre_interests": vec!["sci-fi", "fantasy", "memoir"], "last_active": DateTime::builder().year(2019).month(7).day(1).build().unwrap() },
19+
doc! { "name": "Belinda James", "age": 76, "genre_interests": vec!["literary", "nonfiction"], "last_active": DateTime::builder().year(2019).month(6).day(11).build().unwrap() },
20+
doc! { "name": "Corey Saltz", "age": 29, "genre_interests": vec!["fiction", "sports", "memoir"], "last_active": DateTime::builder().year(2019).month(1).day(23).build().unwrap() },
21+
doc! { "name": "John Soo", "age": 16, "genre_interests": vec!["fiction", "sports"], "last_active": DateTime::builder().year(2019).month(1).day(3).build().unwrap() },
22+
doc! { "name": "Lisa Ray", "age": 39, "genre_interests": vec!["poetry", "art", "memoir"], "last_active": DateTime::builder().year(2019).month(5).day(30).build().unwrap() },
23+
doc! { "name": "Kiran Murray", "age": 20, "genre_interests": vec!["mystery", "fantasy", "memoir"], "last_active": DateTime::builder().year(2019).month(1).day(30).build().unwrap() },
24+
doc! { "name": "Beth Carson", "age": 31, "genre_interests": vec!["mystery", "nonfiction"], "last_active": DateTime::builder().year(2019).month(8).day(4).build().unwrap() },
25+
doc! { "name": "Thalia Dorn", "age": 21, "genre_interests": vec!["theory", "literary", "fiction"], "last_active": DateTime::builder().year(2019).month(8).day(19).build().unwrap() },
26+
doc! { "name": "Arthur Ray", "age": 66, "genre_interests": vec!["sci-fi", "fantasy", "fiction"], "last_active": DateTime::builder().year(2019).month(11).day(27).build().unwrap() },
2727
];
2828

2929
my_coll.insert_many(docs, None).await?;
@@ -37,7 +37,7 @@ async fn main() -> mongodb::error::Result<()> {
3737
"avg_age": doc! { "$avg": "$age" },
3838
"min_age": doc! { "$min": "$age" },
3939
"max_age": doc! { "$max": "$age" }
40-
} }
40+
} },
4141
];
4242

4343
let mut results = my_coll.aggregate(age_pipeline, None).await?;
@@ -50,9 +50,9 @@ async fn main() -> mongodb::error::Result<()> {
5050
// begin-lastactive-agg
5151
let last_active_pipeline = vec![
5252
doc! { "$project": { "month_last_active" : doc! { "$month" : "$last_active" } } },
53-
doc! { "$group": doc! { "_id" : doc! {"month_last_active": "$month_last_active"} ,
54-
"number" : doc! { "$sum" : 1 } } },
55-
doc! { "$sort": { "_id.month_last_active" : 1 } }
53+
doc! { "$group": doc! { "_id" : doc! {"month_last_active": "$month_last_active"} ,
54+
"number" : doc! { "$sum" : 1 } } },
55+
doc! { "$sort": { "_id.month_last_active" : 1 } },
5656
];
5757

5858
let mut results = my_coll.aggregate(last_active_pipeline, None).await?;
@@ -67,7 +67,7 @@ async fn main() -> mongodb::error::Result<()> {
6767
doc! { "$unwind" : "$genre_interests" },
6868
doc! { "$group" : doc! { "_id" : "$genre_interests" , "number" : doc! { "$sum" : 1 } } },
6969
doc! { "$sort" : doc! { "number" : -1 } },
70-
doc! { "$limit": 3 }
70+
doc! { "$limit": 3 },
7171
];
7272

7373
let mut results = my_coll.aggregate(popularity_pipeline, None).await?;

0 commit comments

Comments
 (0)