Sử dụng $where với hàm JavaScript so sánh _id và trường lồng nhau. Tạo collection:
> db.demo69.insertOne({
"_id" : ObjectId("507c7f79bcf86cd7994f6c0e"),
"Details" : { "id" : ObjectId("507c7f79bcf86cd7994f6c0e") }
});
{ "acknowledged" : true, "insertedId" : ObjectId("507c7f79bcf86cd7994f6c0e") }
> db.demo69.insertOne({
"_id" : ObjectId("507c7f79bcf86cd7994f6c0f"),
"Details" : { "id" : ObjectId("507c7f79bcf86cd7994f6c0a") }
});
{ "acknowledged" : true, "insertedId" : ObjectId("507c7f79bcf86cd7994f6c0f") }
Hiển thị tài liệu:
> db.demo69.find();
Truy vấn $where so sánh _id và Details.id (chuyển string để so sánh ObjectId):
> db.demo69.find({ $where: function(){ return this._id.toString() == this.Details.id.toString(); } }).pretty();Kết quả - chỉ tài liệu đầu tiên khớp:
Cảnh báo:
$wherechạy JavaScript engine, rất chậm, không dùng index, khóa database. Chỉ dùng khi không thể dùng query operator thông thường. Thay thế: lưu _id dạng string ở cả 2 chỗ, dùng$expr: {$eq: ["$_id", "$Details.id"]}(MongoDB 3.6+).