Nin mongodb

So sánh trên $setIsSubset là một lựa chọn ngắn hơn so với điều kiện $or mà bạn đang sử dụng, dù vậy về cơ bản nó vẫn có giá trị để thực hiện những gì bạn đang làm

Điều hấp dẫn duy nhất với $setIsSubset là mỗi đối số là một mảng, do đó bạn cần chuyển đổi một phần tử thành một mảng phần tử duy nhất. Điều này đủ dễ dàng bằng cách sử dụng

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
1

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$setIsSubset": [
                        { "$map": {
                            "input": ["A"],
                            "as": "el",
                            "in": "$id"
                        }},
                        [ 0,100,101,102,103,104,105 ],
                    ]},
                    1,
                    0
                ]
            }
        }
    }}    
])

Hoặc nếu bạn thích, thì thay vào đó hãy so khớp mảng đối số với giá trị số ít, với

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
2

________một

Trường hợp

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
1 thay vì duyệt qua các đối số để khớp với số ít hơn là buộc số ít vào một mảng

Và tất nhiên vì một trong hai hình thức về cơ bản là cung cấp

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
1 cho
db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
2 nên bạn chỉ có thể đảo ngược logic với
db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}},
                    1,
                    0
                ]
            }
        }
    }}
])
3 nếu cần

db.collectionName.aggregate([
    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$not": [{ "$anyElementTrue": { "$map": {
                        "input": [ 0,100,101,102,103,104,105 ],
                        "as": "el",
                        "in": { "$eq": [ "$$el", "$id" ] }
                    }}}]},
                    1,
                    0
                ]
            }
        }
    }}
])

Nó thực sự phụ thuộc vào cách bạn nhìn vào nó, nhưng chỉ đơn giản là các đối số được cung cấp thì bạn không thực sự đạt được bất cứ điều gì so với biểu mẫu ban đầu với $or. Nó có thể trông gọn gàng hơn một chút và "dễ gõ hơn", nhưng thông thường tôi sẽ không trực tiếp "gõ" logic như vậy vào đường dẫn tổng hợp, mà thay vào đó tạo ra phần cấu trúc đó dựa trên danh sách đơn giản ngay từ đầu

i. e

var failList = [ 0,100,101,102,103,104,105 ];

var orCondition = failList.map(function(el) { 
    return { "$eq": [ "$id", el ] }
})

Và sau đó chỉ cần sử dụng nội dung mảng được ánh xạ lại trong định nghĩa đường ống

    { "$group": {
        "_id": "$createdAt",
        "count": { "$sum": 1 },
        "count_failure": {
            "$sum": {
                "$cond": [
                    { "$or": orCondition },
                    1,
                    0
                ]
            }
        }
    }}
])

Dù bạn nhìn nó theo cách nào, hãy nhớ rằng tất cả chỉ là cấu trúc dữ liệu và bạn có các quy trình cơ bản để thao tác. Cả bên trong quá trình xử lý đường ống và cả trong chính việc xây dựng đường ống

Nin trong MongoDB là gì?

Toán tử $nin trong MongoDB là gì? . Toán tử $nin (not in) là một trong những toán tử đó. Toán tử $nin được dùng để chọn các tài liệu có giá trị của một trường không bằng bất kỳ giá trị nào đã cho trong mảng .

Làm cách nào để sử dụng Nin trong MongoDB?

Cách sử dụng toán tử $nin trong MongoDB. Toán tử $nin trong MongoDB hoạt động ngược lại với $in; . Cú pháp giống với $in và được hiển thị bên dưới. {"tệp". {$ của. ["giá trị1", "giá trị2". ]}}

Làm cách nào để sắp xếp dữ liệu trong MongoDB?

Đặt thứ tự sắp xếp .
Trong Thanh truy vấn, bấm Tùy chọn
Nhập tài liệu sắp xếp vào trường Sắp xếp. Để chỉ định thứ tự tăng dần cho một trường, hãy đặt trường thành 1 trong tài liệu sắp xếp. Để chỉ định thứ tự giảm dần cho một trường, hãy đặt trường và -1 trong tài liệu sắp xếp. .
Nhấp vào Tìm để chạy truy vấn và xem kết quả được cập nhật

Làm cách nào để sử dụng elemMatch trong MongoDB?

Toán tử $elemMatch so khớp các tài liệu chứa trường mảng với ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định . Nếu bạn chỉ xác định một điều kiện