如何为Couchbase Lite创建复杂的联接查询

问题描述

我正试图提出一个适当的联接查询,以将以下文档联接在一起(人为但有用),但我什至不知道从哪里开始。

由于official documentation似乎已经过时({is(roleName) { let roles = roleName.split('|') return roles.forEach(role => { return this.$page.auth.user.roles.includes(role) }) } 甚至不存在),因此很快就无法使用它了。

沙发床mobile documentation的流行一些,但我仍在努力使其正面或反面。它不会使用 API将1转换为1。

我要加入的文档与此类似

IFunction

目标是投射一个复杂的C#对象

    /*school.json*/
    {
        "Name": "Harvard","Teachers": [
            {
                "HireDate": "1-1-2020","SchoolId": "qwerty","TeacherDocumentId": "Teacher::1234"
            },{
                "HireDate": "1-1-2019","SchoolId": "zxcvb","TeacherDocumentId": "Teacher::1235"
            }
        ]
    }

    /*teacher.json*/
    {
        "Id":"Teacher::1234","Name": "Peggy Sue","TeacherDetailDocumentId":"TeacherDetail::9876"
    }

    /*teacher.json*/
    {
        "Id":"Teacher::1235","Name": "William Jackson","TeacherDetailDocumentId":"TeacherDetail::9875"
    }

    /*teacherdetail.json*/
    {
        "Id":"TeacherDetail::9876","CourseLoad":1
    }

    /*teacherdetail.json*/
    {
        "Id":"TeacherDetail::9875","CourseLoad":3
    }

类似于以下复杂的json

public class School
{
    public string Name {get;set;}
    public IEnumerable<SchoolTeacher> Teachers {get;set;}
}

public class SchoolTeacher
{
    public DateTime HireDate { get; set;}
    public string SchoolId { get; set;}
    public string TeacherDocumentId { get; set; }
    public Teacher Teacher { get; set; }
}

public class Teacher
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string TeacherDetailDocumentId { get; set; }
    public TeacherDetail TeacherDetail { get; set; }
}

public class TeacherDetail
{ 
    public string Id { get; set; }
    public int CourseLoad { get; set; }

}

解决方法

与当前的Couchbase Lite查询API一样,您将需要进行多个查询才能获取学校教师列表中每位教师的信息。如果您不需要一次构建整个JSON,这可能会导致性能和内存问题,具体取决于教师人数,则可以将查询细分为多个级别,并在访问特定数据时根据需要查询它们。 / p>

例如,访问School.Teachers属性时,您可以先查询SchoolTeacher列表,但不提供详细信息。访问SchoolTeacher.teacher后,您可以再次查询以获取老师的详细信息。