首页 > 解决方案 > 检查数组中的所有元素是否具有 mongodb 中某个字段的值

问题描述

我需要验证每个文档的 baz 字段值是否相同。

结构看起来像这样。

{
    _id : 111111,
    foo : 123123,
    bar : [
        {
            subId : 121212,
            baz : abc123
        },
        {
            subId : 131313,
            baz : abc123
        },
    ]
},
{
    _id : 222222,
    foo : 234234,
    bar : [
        {
            subId : 212121,
            baz : def456
        },
        {
            subId : 313131,
            baz : def456
        },
    ]
},

基本上我只需要确保对于每个文档,baz 应该始终相同。我该如何查询呢?

标签: mongodbmongodb-query

解决方案


试试这个:

db.allSame.aggregate([
    {
        $addFields: {
            "uniqueBazCount": {
                $sum: {
                    $map: {
                        input: "$bar",
                        as: "item",
                        in: {
                            $cond: [{ $eq: ["$$item.baz", { $arrayElemAt: ["$bar.baz", 0] }] }, 0, 1]
                        }
                    }
                }
            }
        }
    },
    {
        $match: { uniqueBazCount: 0 }
    }
]);

要获取具有不同值的文档,更改$match如下:

{
    $match: {
        uniqueBazCount: { $gt: 0 }
    }
}

推荐阅读