如何从couchbase查询深度嵌套的json值?我在couchbase桶中有以下文档。我需要查询appversion>3.2.1或appversion <3.3.0或appversion=3.4.1。
如何从嵌套的json查询这些值?
我的Json文件
第1号文件:
com.whatsapp_1
{
"doc-type": "App-Metadata",
"bundleid": "com.whatsapp",
"value": {
"appId": "com.whatsapp",
"appName": "WhatsApp Messenger",
"primaryCategoryName": "Communication"
}
}文件2:
com.whatsapp_2
{
"doc-type": "App-Lookalike",
"bundleid": "com.whatsapp",
"value": {
"com.facebook.orca": 476664,
"org.telegram.messenger.erick.lite": 423132,
"com.viber.voip": 286410,
"messenger.free.video.call.chat": 232830,
"com.facebook.katana": 223000,
"com.wChatMessenger_6210995": 219960,
"com.facebook.talk": 187884
}
}文件3:
com.whatsapp_3
{
"doc-type": "Internal-Metadata",
"bundleid": "com.whatsapp",
"value": {
"appversion": "3.4.1"
}
}发布于 2018-10-30 13:21:01
值是保留关键字,您需要在它周围使用倒计时。
SELECT *
FROM sampleBucket
WHERE `doc-type` = 'Internal-Metadata' AND
(`value`.appversion>"3.2.1" OR
`value`.appversion <"3.3.0" OR
`value`.appversion="3.4.1");发布于 2018-10-29 13:37:22
要查询嵌套实体,您应该使用unnest关键字:https://dzone.com/articles/nesting-and-unnesting-in-couchbase-n1ql
在您的例子中,它将类似于:
select t.* from mybucket t UNNEST `t.value` v where t.doc-type = 'Internal-Metadata' and v.appversion = '3.2.1'由于您是应用程序版本是字符串,您应该使用替换函数删除“。,然后在比较之前将其转换为int。
https://docs.couchbase.com/server/5.5/n1ql/n1ql-language-reference/stringfun.html#fn-str-replace
发布于 2018-10-30 08:56:51
我不太确定您想要什么,但是如果您想要一个只返回document 3的查询,那么这个查询就应该这样做。
SELECT *
FROM sampleBucket
WHERE value.appversion>"3.2.1" OR value.appversion <"3.3.0" OR value.appversion="3.4.1"这应该只返回第三份文件。该查询还假定所有的应用程序版本都是from x.y.z,其中x、y和z是个位数数字。
如果这不是你想要的结果,请更准确地解释你想要什么。
https://stackoverflow.com/questions/53046302
复制相似问题