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

Truy vấn MongoDB tìm document có 2 giá trị trong mảng thỏa mãn nhiều tiêu chí

Sử dụng toán tử $elemMatch kết hợp $and để tìm document có mảng chứa 2 giá trị phân biệt thỏa mãn 2 điều kiện khác nhau.

Tạo collection với document:

> db.findDocumentsHaving2Demo.insertOne({ _id: 101, Values: [78, 98] });
{ "acknowledged" : true, "insertedId" : 101 }
> db.findDocumentsHaving2Demo.insertOne({ _id: 102, Values: [89, 102] });
{ "acknowledged" : true, "insertedId" : 102 }

Hiển thị tất cả document:

> db.findDocumentsHaving2Demo.find().pretty();

Kết quả:

{ "_id" : 101, "Values" : [ 78, 98 ] }
{ "_id" : 102, "Values" : [ 89, 102 ] }

Truy vấn tìm document có: (1) một giá trị trong [77,78] VÀ (2) một giá trị trong [90,110] VÀ (3) mảng chỉ có 2 phần tử (không có index 2):

> db.findDocumentsHaving2Demo.find({
  $and: [
    { Values: { $elemMatch: { $gte: 77, $lte: 78 } } },
    { Values: { $elemMatch: { $gte: 90, $lte: 110 } } },
    { 'Values.2': { $exists: false } }
  ]
});

Kết quả (chỉ document _id: 101 thỏa mãn):

{ "_id" : 101, "Values" : [ 78, 98 ] }