cuốn sách gpt4 ai đã làm

regrec - Mongodb khác nhau trên các trường mảng với truy vấn biểu thức chính quy?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 02:29:32 27 4
mua khóa gpt4 Nike

Về cơ bản, tôi đang cố triển khai chức năng nhãn trên mô hình.

> db.event.distinct("thẻ")
[ "thanh", "foo", "foobar" ]

Việc thực hiện một truy vấn riêng biệt đơn giản sẽ truy xuất tất cả các thẻ riêng biệt. Nhưng làm cách nào để có được tất cả các thẻ khác nhau phù hợp với một truy vấn nhất định? Ví dụ, tôi muốn có được foo tất cả các thẻ phù hợp thì mong đợi nhận được ["foo","foobar"] kết quả?

Truy vấn sau đây là nỗ lực thất bại của tôi để đạt được điều này:

> db.event.distinct("tags",/foo/)
[ "thanh", "foo", "foobar" ]

> db.event.distinct("tags",{tags: {$regex: 'foo'}})
[ "thanh", "foo", "foobar" ]

câu trả lời hay nhất

khung tổng hợpthay vì .riêng biệt() 命令:

db.event.aggregate([
// Khử chuẩn hóa nội dung mảng thành các tài liệu riêng biệt
{ "$thư giãn": "$tags" },

// Lọc nội dung không chuẩn hóa để loại bỏ nội dung không khớp
{ "$match": { "tags": /foo/ } },

// Nhóm các từ "like" thành "key"
{ "$group": {
"_id": "$tags"
}}
])

Có lẽ tốt hơn hết bạn nên sử dụng " neo " ở đầu biểu thức chính quy, tức là bắt đầu từ "phần đầu" của chuỗi. và cũng làm điều này$matchXử lý $unwind Ngoài ra trước đó:

db.event.aggregate([
// So khớp các tài liệu có thể. Luôn là cách tiếp cận tốt nhất.
{ "$match": { "tags": /^foo/ } },

// Khử chuẩn hóa nội dung mảng thành các tài liệu riêng biệt
{ "$thư giãn": "$tags" },

// Bây giờ "lọc" nội dung cho phù hợp thực tế
{ "$match": { "tags": /^foo/ } },

// Nhóm các từ "like" thành "key"
{ "$group": {
"_id": "$tags"
}}
])

Điều này đảm bảo rằng bạn không phải đối phó với $unwindTrước khi bạn "lọc", chỉ mỗi tài liệu trong bộ sưu tập và những tài liệu có thể chứa giá trị "thẻ khớp" mới được xác thực.

Cách tiếp cận thực sự "tinh vi" giúp giảm thiểu phần nào các mảng lớn có thể khớp đòi hỏi nhiều công việc hơn và là MongoDB 2.6 trở lên:

db.event.aggregate([
{ "$match": { "tags": /^foo/ } },
{ "$project": {
"tags": { "$setDifference": [
{ "$map": {
"đầu vào": "$tags",
"as": "el",
"trong": { "$cond": [
{ "$eq": [
{ "$substr": [ "$$el", 0, 3 ] },
"foo"
]},
"$$el",
SAI
]}
}},
[SAI]
]}
}},
{ "$thư giãn": "$tags" },
{ "$group": { "_id": "$tags" }}
])

所以bản đồ $là một bộ xử lý mảng "nội tuyến" tốt, nhưng nó chỉ có thể đi xa đến thế. $setSự khác biệtphủ định toán tử SAI phù hợp, nhưng cuối cùng bạn vẫn phải đối phó với $unwind để hoàn thành phần còn lại $group các giai đoạn để có được các giá trị tổng thể khác nhau.

Ưu điểm ở đây là mảng hiện được "rút gọn" thành chỉ các phần tử "nhãn" phù hợp. Không sử dụng tùy chọn này khi bạn muốn "đếm" số lần xuất hiện của các giá trị "nhiều khác biệt" trong cùng một tài liệu. Nhưng một lần nữa, có nhiều cách khác để giải quyết vấn đề này.

Về biểu thức chính quy - Mongodb có khác biệt trên các trường mảng với truy vấn biểu thức chính quy không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/28090205/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress