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

Tìm tài liệu MongoDB có địa chỉ giao hàng = địa chỉ thanh toán

Sử dụng toán tử $where cho phép chạy biểu thức JavaScript tùy ý để so sánh giá trị giữa các trường trong cùng tài liệu. Tạo collection đơn hàng:

> db.demo589.insertOne({deliveryAddress:"US",billingAddress:"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e92c117fd2d90c177b5bccc") }
> db.demo589.insertOne({deliveryAddress:"US",billingAddress:"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e92c11bfd2d90c177b5bccd") }
> db.demo589.insertOne({deliveryAddress:"US",billingAddress:"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e92c11ffd2d90c177b5bcce") }
> db.demo589.insertOne({deliveryAddress:"UK",billingAddress:"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e92c127fd2d90c177b5bccf") }

Hiển thị tất cả:

> db.demo589.find();

Truy vấn $where so sánh 2 trường trong cùng tài liệu:

> db.demo589.find( { $where: "this.deliveryAddress == this.billingAddress" } );

Kết quả (chỉ bản ghi 2 trùng khớp):


Cảnh báo: $where chạy JavaScript engine, chậm hơn nhiều so với toán tử truy vấn gốc. Chỉ dùng khi không thể biểu diễn bằng $expr (aggregation) hoặc các toán tử chuẩn. Từ MongoDB 4.4, dùng $expr trong find: db.demo589.find({$expr: {$eq: ["$deliveryAddress", "$billingAddress"]}}).