Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tìm document MongoDB với trường bằng giá trị số nguyên cho trước

Tìm document theo giá trị số nguyên chính xác với find()

Sử dụng find() với filter trường số. MongoDB so sánh kiểu dữ liệu chặt chẽ: 101 (int) ≠ "101" (string).

1. Dữ liệu: Project_Id kiểu int (có cả âm)

> db.demo472.insertOne({ Project_Id: -101, ProjectName: "Online Customer Tracking" });
> db.demo472.insertOne({ Project_Id: 101, ProjectName: "Online Banking System" });
> db.demo472.insertOne({ Project_Id: 102, ProjectName: "Online Library System" });

2. Tìm Project_Id = -101

> db.getCollection('demo472').find({ "Project_Id": -101 });

3. Kết quả

{ 
    "_id": ObjectId("5e80586cb0f3fa88e227907a"),
    "Project_Id": -101,
    "ProjectName": "Online Customer Tracking"
}

Lưu ý về so sánh kiểu số trong MongoDB

Giá trị queryKhớp vớiKhông khớp
101 (int)Int32(101), Int64(101), Double(101.0)"101" (string)
NumberInt(101)Int32(101)Int64(101), Double(101.0)
NumberLong(101)Int64(101)Int32(101), Double(101.0)
101.0 (double)Double(101.0), Int32(101), Int64(101)"101" (string)

Quan trọng: MongoDB cho phép so sánh cross-type giữa các kiểu số (int, long, double) nhưng KHÔNG so sánh số với string.

Tìm nhiều giá trị số ($in)

db.demo472.find({ Project_Id: { $in: [-101, 101] } });
// Trả về cả 2 document Project_Id -101 và 101

Tìm khoảng số ($gte, $lte)

// Project_Id từ 100 đến 105
db.demo472.find({ Project_Id: { $gte: 100, $lte: 105 } });

// Project_Id âm
db.demo472.find({ Project_Id: { $lt: 0 } });

Kiểm tra kiểu dữ liệu trường

// Xem kiểu BSON của Project_Id
db.demo472.aggregate([
    { $project: { Project_Id: 1, type: { $type: "$Project_Id" } } }
]);
// { "Project_Id": -101, "type": "int" }

Best practice

    Đồng bộ kiểu dữ liệu trong application (luôn dùng int hoặc luôn dùng long)
  • Validate ở application layer trước khi insert
  • Dùng $type trong migration để phát hiện field sai kiểu