1

我有一个类似的文件

{ id : "123", name : "sai", marks : {English : 50, Maths : 60, Science :90} }

标记可以包含任何主题和任何名称。(模式不固定)

我想要任何一门科目不及格的学生名单(任何科目<35)

有什么方法可以做到这一点或需要更改架构以获得结果?

任何帮助将不胜感激。

4

1 回答 1

2

因此,对您的架构稍作修改,我的文档现在看起来像这样 -

{id :  "123", name :  "sai", marks : [
        {Subject :  "English", Grade :  50},
        {Subject :  "Maths", Grade :  60},
        {Subject :  "Science", Grade :  90}
    ]
}

然后必须添加一个自定义 IndexingPolicy IncludePath 以允许像这样的范围查询 -

    {
        Path :  /"marks"/[]/"Grade"/?,
        IndexType :  Range,
        NumericPrecision :  3
    }

完成后,您可以运行以下查询

    SELECT VALUE students FROM students JOIN marks IN students.marks WHERE marks.Grade < 60

如果您想在 .NET 中使用 LINQ 执行此操作,请告诉我,我将发布此查询的 LINQ。

如果您不在 Grade 字段上添加 RANGE 索引,您仍然可以执行此查询,但您必须指定“Allow Scan in Query”选项,这将强制进行扫描。性能不是很好,这种方式要好得多。

如果您无法将您的架构更改为我所拥有的,请告诉我,我将在查询中多玩一点

于 2015-03-27T03:53:51.673 回答