首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从couchbase查询深度嵌套的json值?

如何从couchbase查询深度嵌套的json值?
EN

Stack Overflow用户
提问于 2018-10-29 13:14:45
回答 3查看 1.5K关注 0票数 1

如何从couchbase查询深度嵌套的json值?我在couchbase桶中有以下文档。我需要查询appversion>3.2.1或appversion <3.3.0或appversion=3.4.1。

如何从嵌套的json查询这些值?

我的Json文件

第1号文件:

代码语言:javascript
复制
com.whatsapp_1

{
  "doc-type": "App-Metadata",
  "bundleid": "com.whatsapp",
  "value": {
    "appId": "com.whatsapp",
    "appName": "WhatsApp Messenger",
    "primaryCategoryName": "Communication"
  }
}

文件2:

代码语言:javascript
复制
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:

代码语言:javascript
复制
com.whatsapp_3

{
  "doc-type": "Internal-Metadata",
  "bundleid": "com.whatsapp",
  "value": {
    "appversion": "3.4.1"
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-30 13:21:01

值是保留关键字,您需要在它周围使用倒计时。

代码语言:javascript
复制
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");
票数 3
EN

Stack Overflow用户

发布于 2018-10-29 13:37:22

要查询嵌套实体,您应该使用unnest关键字:https://dzone.com/articles/nesting-and-unnesting-in-couchbase-n1ql

在您的例子中,它将类似于:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2018-10-30 08:56:51

我不太确定您想要什么,但是如果您想要一个只返回document 3的查询,那么这个查询就应该这样做。

代码语言:javascript
复制
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是个位数数字。

如果这不是你想要的结果,请更准确地解释你想要什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53046302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档