使用 Between 在 Couchbase 中获取范围之间的值未按预期工作

Get the values between a range in Couchbase using Between is not working as expected

我正在 Couchbase 中使用一个查询,我正在尝试使用 BETWEEN 子句,但出于某种原因,这个查询正在检索与范围无关的结果,我认为有Integer 类型的一些问题,我不太确定发生了什么。

SELECT META( b ).id AS _ID, META( b ).cas AS _CAS,  b.* 
FROM  `kids_club`  AS b
WHERE  b.`docType`  = "com.rccl.middleware.kidsclub.engine.repository.model.ShipRoom" AND 
        ANY v IN b.rooms SATISFIES v.minAge <= 7 AND v.maxAge  >=  7 END;



[
        {
            "_CAS": 1568040819174539264,
            "_ID": "ShipRoom::ID",
            "docType": "com.rccl.middleware.kidsclub.engine.repository.model.ShipRoom",
            "rooms": [
                {
                    "id": "ROOM-00",
                    "maxAge": 6,
                    "minAge": 3,
                    "name": "Nursery"
                },
                {
                    "id": "ROOM-01",
                    "maxAge": 6,
                    "minAge": 3,
                    "name": "Nursery"
                },
                {
                    "id": "ROOM-02",
                    "maxAge": 16,
                    "minAge": 6,
                    "name": "Example2"
                },
                {
                    "id": "ROOM-03",
                    "maxAge": 16,
                    "minAge": 6,
                    "name": "Example2"
                },
                {
                    "id": "ROOM-02",
                    "maxAge": 16,
                    "minAge": 17,
                    "name": "Example2"
                }

这是我的查询:

SELECT META( b ).id AS _ID, META( b ).cas AS _CAS,  b.* 
FROM  `kids_club`  AS b
WHERE  b.`docType`  = "com.rccl.middleware.kidsclub.engine.repository.model.ShipRoom" AND 
        ANY v IN b.rooms SATISFIES v.minAge <= 7 AND v.maxAge  >=  7 END;

但是我得到了例如:

{
        "id": "ROOM-02",
        "maxAge": 16,
        "minAge": 17,
        "name": "Example2"
}

这是错误的。

你的查询语义说,如果任何数组元素具有 minAge <= 7 和 maxAge >= 7,请给我整个文档。在你的情况下 "ROOM-3" 有那个信息。

如果您只想投影符合条件的房间并删除所有其他房间,您应该像下面这样在投影中重建 ARRAY。

SELECT META(b).id AS _ID, META(b).cas AS _CAS, b.*,
  ARRAY v FOR v IN b.rooms WHEN v.minAge <= 7 AND v.maxAge >= 7 END AS rooms
FROM kids_club AS b
WHERE b.docType = "com.rccl.middleware.kidsclub.engine.repository.model.ShipRoom" AND
ANY v IN b.rooms SATISFIES v.minAge <= 7 AND v.maxAge >= 7 END;