Bạn chỉ có thể làm điều đó với khung tổng hợp, không phải với tính năng tìm kiếm thông thường.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
Lưu ý rằng điều này sẽ không thể sử dụng bất kỳ chỉ mục nào, vì không có hỗ trợ cho các chỉ mục trên các giá trị được tính toán trong MongoDB (chưa).
Nếu bạn có chỉ mục trên field1
và bạn biết có bao nhiêu ký tự bạn mong muốn field1 đóng góp vào giá trị value
bạn có thể cải thiện hiệu suất của tập hợp này như thế này:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
ở đâu val
là phần đầu tiên của chuỗi "giá trị" (bạn không được so sánh nhiều ký tự hơn giá trị ngắn nhất có thể có của field1
mặc dù.
CHỈNH SỬA kể từ phiên bản 3.6, bạn có thể thực hiện việc này bằng cách sử dụng $expr
biểu thức:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})