Mongodb so sánh các đối tượng

Chương này sẽ trình bày các kỹ thuật cơ bản để đọc dữ liệu từ MongoDB. Để minh họa cho chương này, chúng ta bắt đầu bằng cách tạo một bộ sưu tập kim cương mới và chèn một tập dữ liệu ví dụ từ gói ggplot2

#> List of 5
#>  $ nInserted  : num 53940
#>  $ nMatched   : num 0
#>  $ nRemoved   : num 0
#>  $ nUpserted  : num 0
#>  $ writeErrors: list()

Chương tiếp theo giải thích chi tiết hơn về việc chèn dữ liệu. Bây giờ, hãy xác minh tất cả dữ liệu của chúng tôi đã được chèn

#> [1] TRUE

Trông có vẻ tốt

MongoDB sử dụng cú pháp dựa trên JSON để truy vấn tài liệu. Truy vấn trống

#> [1] TRUE
9 có nghĩa là. chọn tất cả dữ liệu. Cùng một tham số truy vấn được sử dụng cho nhiều thao tác, chẳng hạn như
#> [1] 53940
0,
#> [1] 53940
1,
#> [1] 53940
2,
#> [1] 53940
3 và
#> [1] 53940
4. Chúng ta cần chỉ định truy vấn JSON dưới dạng một chuỗi trong R

#> [1] 53940
#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]

Để truy vấn tất cả các hàng có

#> [1] 53940
5 bạn sẽ chạy

#> [1] TRUE
1

Chúng tôi có thể xác nhận rằng chúng tôi nhận được cùng một tập hợp con trong R

#> [1] TRUE
2
#> [1] TRUE
2

Để tìm hiểu thêm về các truy vấn dữ liệu mongo, hãy nghiên cứu tài liệu hướng dẫn Mongo Query Documents

Tham số

#> [1] 53940
6 lọc các cột cụ thể từ đầu ra. Hãy tiếp tục ví dụ của chúng tôi ở trên

#> [1] TRUE
5

Theo mặc định, mongo luôn bao gồm trường

#> [1] 53940
7. Để ngăn chặn điều này, chúng ta cần vô hiệu hóa nó một cách rõ ràng

#> [1] TRUE
7

Giá trị mặc định cho đối số

#> [1] 53940
8 là
#> [1] 53940
9 i. e. tất cả các cột, ngoại trừ
#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
0

Tham số

#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
1 cho phép chúng tôi sắp xếp đầu ra và
#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
2 hạn chế các bản ghi số sẽ được trả về. Ví dụ để trả về 7 viên kim cương cao cấp đắt nhất trong dữ liệu chúng ta sắp xếp theo giá giảm dần

#> [1] TRUE
3

Lưu ý rằng thông thường bạn chỉ nên sắp xếp theo các trường có chỉ mục được đặt trên chúng. Sắp xếp theo các trường chưa được lập chỉ mục có thể rất chậm và máy chủ có thể đạt đến giới hạn bộ nhớ trên máy chủ

Theo mặc định, một bộ sưu tập chỉ có chỉ mục cho

#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
0, điều đó có nghĩa là việc chọn hoặc sắp xếp theo bất kỳ trường nào khác tương đối chậm

#> [1] TRUE
0

Bằng cách thêm một chỉ mục, trường được sắp xếp trước và việc chọn hoặc sắp xếp nó gần như ngay lập tức

#> [1] TRUE
1
#> [1] TRUE
2

Để tăng tốc các truy vấn liên quan đến nhiều trường, bạn cần thêm một chỉ mục chéo giao cắt cả hai trường

#> [1] TRUE
3____14

Để xóa các chỉ mục khỏi bộ sưu tập, hãy sử dụng

#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
4 như được liệt kê ở trên

#> [1] TRUE
3____11

Phương pháp

#> [1] 53940
0 tự động đơn giản hóa bộ sưu tập thành khung dữ liệu, nhưng đôi khi bạn cần kiểm soát chi tiết hơn. Phương thức
#> [1] 53940
1 cho phép bạn thực hiện truy vấn, nhưng đọc từng bản ghi mà không đơn giản hóa

Trình vòng lặp có các phương thức

#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
7,
#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
8 cho phép bạn duyệt qua một hoặc
#>       carat       cut color clarity depth table price     x     y     z
#> 1      0.23     Ideal     E     SI2  61.5  55.0   326  3.95  3.98  2.43
#> 2      0.21   Premium     E     SI1  59.8  61.0   326  3.89  3.84  2.31
#> 3      0.23      Good     E     VS1  56.9  65.0   327  4.05  4.07  2.31
#> 4      0.29   Premium     I     VS2  62.4  58.0   334  4.20  4.23  2.63
#> 5      0.31      Good     J     SI2  63.3  58.0   335  4.34  4.35  2.75
#> 6      0.24 Very Good     J    VVS2  62.8  57.0   336  3.94  3.96  2.48
#> 7      0.24 Very Good     I    VVS1  62.3  57.0   336  3.95  3.98  2.47
#> 8      0.26 Very Good     H     SI1  61.9  55.0   337  4.07  4.11  2.53
#> 9      0.22      Fair     E     VS2  65.1  61.0   337  3.87  3.78  2.49
#> 10     0.23 Very Good     H     VS1  59.4  61.0   338  4.00  4.05  2.39
#>  [ reached getOption("max.print") -- omitted 53930 rows ]
9 bản ghi tại thời điểm đó. Khi iterator hết, nó sẽ trả về
#> [1] TRUE
10. Hãy chạy cùng một truy vấn như trên bằng giao diện iterator

#> [1] TRUE
7

Trình vòng lặp không thực hiện bất kỳ sự đơn giản hóa nào, vì vậy mỗi

#> [1] TRUE
11 chỉ đơn giản là một danh sách được đặt tên chứa bản ghi JSON được phân tích cú pháp

Mỗi bản ghi được chèn vào MongoDB sẽ tự động được gán một giá trị

#> [1] TRUE
12

#> [1] TRUE
8

Ví dụ, sử dụng toán tử ________ 113 (tương tự như ________ 114 trong mongodb) để chọn một bản ghi theo ID của nó