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

Truy vấn MongoDB loại trừ document nếu id trùng giá trị trong mảng

Để loại trừ các document mà trường id có giá trị xuất hiện trong mảng subjectid, ta kết hợp $expr, $not và $in.

Dữ liệu mẫu

[
    {
        id: "101",
        subjectid: [ "102" ]
    },
    {
        id: "102",
        subjectid: [ "102" ]
    }
]

Truy vấn find với $expr

$expr cho phép sử dụng các biểu thức aggregation trong find. $in kiểm tra sự tồn tại, $not phủ định kết quả:

db.collection.find({
    $expr: {
        $not: {
            $in: [
                "$id",
                "$subjectid"
            ]
        }
    }
})

Kết quả

[
    {
        "_id": ObjectId("5a934e000102030405000000"),
        "id": "101",
        "subjectid": [ "102" ]
    }
]

Giải thích:

  • Document 1: id="101" không nằm trong subjectid=["102"] → giữ lại
  • Document 2: id="102" nằm trong subjectid=["102"] → loại bỏ

Cách này hữu ích khi cần so sánh giá trị của một trường với các phần tử trong mảng của chính document đó.