Bộ lọc hoạt động như thế nào trong MongoDB?

Tôi có mảng trong tài liệu con như thế này

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 1
        },
        {
            "a" : 2
        },
        {
            "a" : 3
        },
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}

Tôi có thể lọc tài liệu phụ cho > 3 không

kết quả mong đợi của tôi dưới đây

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}

Tôi cố gắng sử dụng

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
6 nhưng trả về phần tử khớp đầu tiên trong mảng

Sự truy vấn của tôi

db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} )

Kết quả trả về một phần tử trong mảng

{ "_id" : ObjectId("512e28984815cbfcb21646a7"), "list" : [ { "a" : 4 } ] }

và tôi cố gắng sử dụng tổng hợp với

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
7 nhưng không hoạt động

db.test.aggregate({$match:{_id:ObjectId("512e28984815cbfcb21646a7"), 'list.a':{$gte:5}  }})

Nó trả về tất cả phần tử trong mảng

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 1
        },
        {
            "a" : 2
        },
        {
            "a" : 3
        },
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}

Tôi có thể lọc phần tử trong mảng để nhận được kết quả như kết quả mong đợi không?

Bạn có thể thêm bộ lọc vào bộ sưu tập để xóa tài liệu mà bạn biết là không liên quan đến truy vấn đến trước khi Stitch đánh giá bất kỳ vai trò nào. Điều này có thể giúp giảm số lượng tính toán mà Stitch cần thực hiện cho một yêu cầu. Các bộ lọc có thể tận dụng các chỉ mục trong cụm MongoDB được liên kết, do đó, việc lọc ra một tài liệu thường nhanh hơn là chờ Stitch đánh giá vai trò của nó

Quy trình đăng ký bộ lọc

Khi Stitch nhận được yêu cầu truy vấn, nó sẽ xác định xem có bất kỳ bộ lọc nào được liên kết với bộ sưu tập áp dụng cho yêu cầu hay không và thêm những bộ lọc đó vào truy vấn. Để gán bộ lọc cho truy vấn, Stitch đánh giá Áp dụng khi nào biểu thức JSON mà bạn đã xác định cho từng bộ lọc. Nếu Áp dụng khi của bộ lọc có giá trị là

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
8, Stitch sẽ hợp nhất Truy vấn bộ lọc .

Ví dụ

Một bộ sưu tập chứa vài triệu tài liệu và có một vai trò với biểu thức Áp dụng khi sau đây.

sao chép

{ "owner_id": "%%user.id" }

Nếu không có bộ lọc nào được áp dụng, Stitch sẽ đánh giá vai trò cho từng tài liệu phù hợp với truy vấn. Chúng tôi biết rằng Stitch sẽ giữ lại bất kỳ tài liệu nào không có id của người dùng làm giá trị của trường

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
9, vì vậy chúng tôi tiết kiệm thời gian và tài nguyên tính toán bằng cách áp dụng một vị từ truy vấn bổ sung loại trừ các tài liệu đó trước khi Stitch đánh giá bất kỳ vai trò nào

Áp dụng khiTruy vấnDự đoán
db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} )
0
db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} )
1
db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} )
2

Cấu hình bộ lọc truy vấn

sao chép

{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}

Mô tả trường

db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} )
3

Chuỗi

Cần thiết. Tên của bộ lọc. Tên bộ lọc rất hữu ích để xác định và phân biệt giữa các bộ lọc. Giới hạn từ 100 ký tự trở xuống.
{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
0

Bắt buộc. Một biểu thức JSON xác định thời điểm bộ lọc này áp dụng cho một truy vấn nhất định.

Quan trọng

Stitch đánh giá và áp dụng các bộ lọc trước khi nó đọc bất kỳ tài liệu nào, vì vậy bạn không thể sử dụng biểu thức Áp dụng khi của bộ lọc. Tuy nhiên, bạn có thể sử dụng các biến biểu thức khác như , , và.

{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
4

Tài liệu

Cần thiết. Bộ lọc truy vấn MongoDB chứa các biến vị ngữ truy vấn bổ sung để hợp nhất vào các truy vấn đến mà bộ lọc áp dụng cho

Ví dụ

Bộ lọc giữ lại các tài liệu có

{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
5 bên dưới
{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
6 có thể sử dụng truy vấn bộ lọc sau

sao chép

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
2

{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
7

Tài liệu

Cần thiết. Tài liệu phép chiếu MongoDB chỉ định các phép chiếu trường bổ sung để hợp nhất vào các truy vấn đến mà bộ lọc áp dụng cho

Xung đột phép chiếu

Các phép chiếu MongoDB có thể bao gồm hoặc độc quyền, tôi. e. chúng có thể chỉ trả lại các trường được chỉ định hoặc giữ lại các trường không được chỉ định. Nếu nhiều bộ lọc áp dụng cho một truy vấn, thì tất cả các bộ lọc phải chỉ định cùng một loại phép chiếu, nếu không truy vấn sẽ không thành công

Ví dụ

Bộ lọc giữ lại trường

{
  "name": "",
  "apply_when": <JSON Expression>,
  "query": <Query Document>,
  "projection": <Projection Document>
}
8 khỏi tất cả các tài liệu có thể sử dụng phép chiếu bộ lọc sau

sao chép

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
5

←   Vai trò truy vấn Lược đồ tài liệu  →

© MongoDB, Inc 2008-nay. MongoDB, Mongo và logo chiếc lá là các nhãn hiệu đã đăng ký của MongoDB, Inc

Làm cách nào để lọc dữ liệu bằng MongoDB?

Trong trường Bộ lọc, hãy nhập tài liệu bộ lọc. Bạn có thể sử dụng tất cả các toán tử truy vấn MongoDB ngoại trừ toán tử $text và $expr. Ví dụ. Bộ lọc sau chỉ trả về các tài liệu có giá trị tiêu đề là Công viên kỷ Jura. .
Nhấp vào Tìm để chạy truy vấn và xem kết quả cập nhật. nhấp để phóng to

Làm cách nào để lọc chuỗi trong MongoDB?

Bằng cách kết hợp việc sử dụng hàm LIKE với các ký tự đại diện , chúng ta có thể tìm thấy tất cả các giá trị bắt đầu, kết thúc hoặc chứa một chuỗi tại một vị trí nhất định. Các nhà phát triển đã từng làm việc với SQL Server rất quen thuộc với ký tự đại diện % đại diện cho 0 hoặc bất kỳ số lượng ký tự nào. Bạn có được ý tưởng.

Làm cách nào để khớp giá trị mảng trong MongoDB?

Toán tử $elemMatch khớp với các tài liệu chứa trường mảng có ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định. Nếu bạn chỉ xác định một điều kiện

Làm cách nào để thêm nhiều điều kiện trong MongoDB?

Trong MongoDB, chúng ta có thể áp dụng nhiều điều kiện bằng cách sử dụng toán tử and . Bằng cách áp dụng thao tác và, chúng tôi sẽ chọn tất cả các tài liệu thỏa mãn tất cả các biểu thức điều kiện. Chúng ta có thể sử dụng toán tử này trong các phương thức như find(), update(), v.v. theo yêu cầu.