首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Couchbase N1QL结果根据SELECT语法更改形状

Couchbase N1QL结果根据SELECT语法更改形状
EN

Stack Overflow用户
提问于 2019-01-23 06:10:28
回答 2查看 346关注 0票数 3

我是Couchbase的新手,我遇到过一种让我非常困扰的行为。假设我在C#中定义了这个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Thing
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

我将它存储在Couchbase中一个名为ThingBucket的存储桶中。现在,如果我进入Couchbase查询工作台并输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT Property1, Property2 FROM ThingBucket

我得到的是一个JSON对象,它将直接反序列化为一个对象数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    {
        "Property1": "Value",
        "Property2": "Value"
    }
]

这很好,因为我不需要做任何特殊的事情就可以把它反序列化为一个东西。Couchbase C#驱动程序调用Json.NET进行反序列化,并且它可以正常工作。

但是,如果我输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM ThingBucket

我没有得到一个数组的东西。我得到了完全不同的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    {
      "ThingBucket": {
          "Property1": "Value",
          "Property2": "Value"
      }
    }
]

现在,我有了一个C#代码中根本不存在的形状数组,而不是一组东西。它是一个对象数组,其中每个对象都有一个属性,这是一个事物。为了将其反序列化为Thing,我必须用JsonProperty属性来覆盖Thing,这看起来既多余又丑陋:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Thing
{
    [JsonProperty("Property1")]
    public string Property1 { get; set; }
    [JsonProperty("Property2")]
    public string Property2 { get; set; }
}

这就是CouchbaseNetClient文档中的示例,所以看起来这是意料之中的行为。

有没有一种优雅的方法可以让它返回原始形状,而不列出SELECT语句中的每个属性?另外,这种行为有没有我的新手眼睛看不到的价值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-23 12:51:13

RAW关键字可能是您要查找的关键字。

SELECT c FROM customer c为您提供了以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "c": {
      "Property1": "Value",
      "Property2": "Value"
    }
  }
]

SELECT RAW c FROM customer c为您提供了以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "Property1": "Value",
    "Property2": "Value"
  }
]
票数 5
EN

Stack Overflow用户

发布于 2019-01-23 14:45:53

由于这种行为,我通常更喜欢使用这样的别名编写N1QL:

SELECT b.* FROM myBucket b;

随着查询变得越来越复杂(使用JOIN和UNNEST等),您最终还是需要这些别名。

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

https://stackoverflow.com/questions/54320981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文