Sử dụng $type
toán tử trong $match
của bạn :
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$type: 16}}} // city is a 32-bit integer
]);
Không có một giá trị loại nào cho số, vì vậy bạn cần biết mình có loại số nào:
32-bit integer 16
64-bit integer 18
Double 1
Hoặc sử dụng $or
toán tử để khớp với tất cả các loại số:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {$or: [{city: {$type: 1}}, {city: {$type: 16}}, {city: {$type: 18}}]}}
]);
Hoặc thậm chí sử dụng $not
để khớp với tất cả các tài liệu ở đó city
không phải là một chuỗi:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$not: {$type: 2}}}} // city is not a string
]);
ĐÃ CẬP NHẬT
Để khớp với tất cả các tài liệu ở city
là một chuỗi số, bạn có thể sử dụng một biểu thức chính quy:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: /^\d.*$/}} // city is all digits
]);