过滤2级属性

时间:2017-03-22 17:53:34

标签: node.js mongodb loopbackjs

我将 LoopBack MongoDB 连接器一起使用。

型号:

申请工作:

{
    "name": "application",
    "plural": "applications",
    "base": "PersistedModel",
    "idInjection": true,
    "options": {
        "validateUpsert": true
    },
    "properties": {
        "jobId": {
            "type": "string",
            "required": true
        },
        "staffId": {
            "type": "string",
            "required": true
        }
    },
    "validations": [],
    "relations": {},
    "acls": [],
    "methods": {}
}

作业:

{
    "name": "job",
    "plural": "jobs",
    "base": "PersistedModel",
    "idInjection": true,
    "options": {
        "validateUpsert": true
    },
    "properties": {
        "title": {
            "type": "string",
            "required": true
        }
    },
    "validations": [],
    "relations": {
        "applications": {
            "type": "hasMany",
            "model": "application",
            "foreignKey": "jobId",
            "primaryKey": "id"
        }
    },
    "acls": [],
    "methods": {}
}

如果用户的id(staffId)在应用程序数组中,我不需要为用户显示该作业。

示例: 我们有一系列带有应用程序的工作

[
  {
    id: 1,
    title: "Job 1",
    applications: [
      {
        jobId: 1,
        staffId: 1
      },
      {
        jobId: 1,
        staffId: 2
      }
    ] 
  },
  { 
    id: 2,
    title: "Job 2",
    applications: [
      {
        jobId: 2,
        staffId: 1
      }
    ] 
  }
]

如果用户的id(staffId)为2,则用户仅看到“作业2”。

我试过这样的事情:

/jobs?filter[include][applications]&filter[where not][applications][elemMatch][staffId]=2

但它不起作用。

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:0)

在此开发状态下,您无法使用REST过滤2级属性:https://github.com/strongloop/loopback/issues/517(缺陷直到2014年)。

您可以做的是定义一个包含以下内容的自定义表情方法:

    var userId = 2;
    Jobs.find({
          include: {
                 relation: 'applications',
                       scope: {
                           where: {staffId: {eq: userId}},
                       }
                  }
    }, function (err, jobs) {

    });