使用 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;
我正在 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;