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

Tìm tài liệu MongoDB nơi _id trùng với trường lồng nhau

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: $where chạ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+).