$expr
cho phép sử dụng Toán tử biểu thức tổng hợp chỉ . Ký hiệu dấu chấm bạn đang sử dụng sẽ không hoạt động để truy cập phần tử mảng cho trường "values" : [ 1 ]
. Bạn cần sử dụng $arrayElemAt
và nó hoạt động tốt.
Mã của bạn find({$expr: {$eq: ["$value1", "$value2"]}})
hoạt động vì $expr
đã sử dụng toán tử biểu thức tổng hợp $ eq
, không toán tử của MongoDB Query Language (MQL) $ eq . Lưu ý rằng cả hai toán tử trông giống nhau, nhưng cách sử dụng và cú pháp khác nhau.
Và, mã find({$expr: {$eq: ["$value1", "$values.0"]}})
đã không hoạt động - như mong đợi. Trong toán tử tổng hợp, $values.0
, 0
được hiểu là tên trường, không phải là chỉ mục của trường mảng.
Ký hiệu dấu chấm hoạt động tốt trong $expr
cũng. Đây là một ví dụ, với tài liệu mẫu:
{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }
Hiện đang sử dụng $expr
và ký hiệu dấu chấm:
db.test.find({ $expr: { $eq: [ "$val.0", 99 ] } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ] } } )
Cả hai truy vấn đều trả về tài liệu - đối sánh xảy ra với bộ lọc sử dụng $expr
và ký hiệu dấu chấm. Tuy nhiên, điều này chỉ hợp lệ với các tài liệu được nhúng (hoặc phụ) không với các trường mảng.
Tạo tài liệu, Người điều hành đường ống tổng hợp nói: