Bạn có thể sử dụng truy vấn dưới đây
Nếu bạn đang sử dụng $expr
thì bạn có thể dễ dàng sử dụng toán tử tổng hợp bên trong nó. Vì vậy, thay vì sử dụng .dot
ký hiệu để tìm phần tử, bạn có thể sử dụng $arrayElemAt
nhà điều hành cung cấp cho bạn cơ sở để chọn phần tử bạn muốn.
db.table.aggregate([
{ '$match': {
'$expr': {
'$and': [
{ '$eq': [{ '$size': '$events' }, 4] },
{ '$lt': [{ '$arrayElemAt': ['$events.updated', 0] }, '2019-05-05'] }
]
}
}}
])
Hoặc theo cách bạn đang cố gắng làm
db.collection.aggregate([
{ "$match": {
"events.0.updated": { "$lt": "2019-05-05" },
"$expr": { "$eq": [{ "$size": "$events" }, 4] }
}}
])
Bạn có thể kiểm tra $expr
hành vi tại đây