Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在MongoDB中通过嵌入式数组过滤文档_Java_Arrays_Mongodb_Count_Nested - Fatal编程技术网

如何使用Java在MongoDB中通过嵌入式数组过滤文档

如何使用Java在MongoDB中通过嵌入式数组过滤文档,java,arrays,mongodb,count,nested,Java,Arrays,Mongodb,Count,Nested,我有以下文件: { "_id": { "$oid": "5d4037f811b787414dcfb3a5" }, "id": 1, "seats": [{ "available": true }, { "available": true }, { "available": true }, { "available": false }] } 如何仅使用m

我有以下文件:

{
    "_id": {
        "$oid": "5d4037f811b787414dcfb3a5"
    },
    "id": 1,
    "seats": [{
        "available": true
    }, {
        "available": true
    }, {
        "available": true
    }, {
        "available": false
    }]
}
如何仅使用mongodb java驱动程序查询可用座位数大于3的文档

我想要的是这样的:
(seats.available eq true)gt 3


有可能吗?

我想这可能是重复的

我猜是这样的:

{ $where: "this.seats.available.length > 3" }

要计算可用座位的数量,我们可以使用$reduce聚合阶段。它将计算可用性标记为“真”的座位数。在下一个管道阶段,将过滤可用座位数大于3的文档

db.checks.aggregate([
    {
        $addFields:{
            "availableSeats":{
                $reduce:{
                    "input":"$seats",
                    "initialValue": 0,
                    "in":{
                        $sum:[
                            "$$value",
                            {
                                $cond:[
                                    {
                                        $eq:["$$this.available",true]
                                    },
                                    1,
                                    0
                                ]
                            }
                        ]
                    }
                }
            }
        }
    },
    {
        $match:{
            "availableSeats":{
                $gte: 3
            }
        }
    }
]).pretty()