MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Toán tử truy vấn $ expr dường như không hoạt động với ký hiệu chấm mảng

$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:

biểu thức :




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ dateFromString

  2. Thay đổi ngày chuỗi thành ngày ISO trong MongoDB?

  3. NoClassDefFoundError => ClassPath $ JavaContext khi sử dụng play start

  4. Cách kết nối Robomongo với MongoDB

  5. chèn mảng vào mongodb bằng pymongo