2015-01-10 1 views
2

Скажем, у меня есть следующее определение модели:Как передать свойство в вложенных объектах ObjectId с loopback и mongodb?

{ 
    "name": "Report", 
    "idInjection": true, 
    "trackChanges": true, 
    "mongodb": { 
    "collection": "report" 
    }, 
    "properties": { 
    "resource" : {"type": "String"}, 
    "date" : {"type": "Date"}, 
    "people" : [ { 
     // Here's where I like to have an id property. 
     "role" : {"type": "String"}, 
     "hours" : {"type": "Number"} 
    } ], 
    "name" : {"type": "String"} 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": [] 
} 

Теперь я хочу, чтобы иметь идентификатор свойства в каждом объекте в массиве людей (которые будут доступны с как report.people [0] .id), и это должно быть casted ObjectId о вставках и обновлениях. Но хорошо, loopback не имеет типа ObjectId, и единственный способ, по-видимому, использует отношения, но тогда как должен быть внешний ключ?

Есть ли способ иметь свойство id, на которое ссылается ObjectId, на вставки и обновления?

Update:

Я попытался с помощью embedsMany, но идентификатор не был преобразован:

Вот мой report.json:

{ 
    "name": "Report", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "people" : { 
     "type": "embedsMany", 
     "model": "ReportPerson", 
     "options": { 
     "validate": true, 
     "autoId": false 
     } 
    } 
    }, 
    "acls": [], 
    "methods": [] 
} 

и вот мой отчет-person.json:

{ 
    "name": "ReportPerson", 
    "base": "Model", 
    "idInjection": true, 
    "properties": { 
    "hours": {"type" : "number"} 
    }, 
    "validations": [{ 
     "person" : { 
      "model": "Person", 
      "type": "belongsTo", 
      "foreignKey": "id" 
     } 
    }], 
    "relations": {}, 
    "acls": [], 
    "methods": [] 
} 

Когда я пытаюсь вставить этот Report с помощью http API:

{ 
    "name" : "report", 
    "people" : [ 
     { 
      "id" : "54c7926e1d621dc65495f069", 
      "hours" : 2 
     } 
    ] 
} 

id не будет приведен к ObjectId и остается в виде строки в базе данных.

+0

Вы проверили http://docs.strongloop.com/display/LB/Embedded+models+and+relations? –

+0

@ RaymondFeng Я обновил мой вопрос относительно этого. –

+0

@FaridNouriNeshat У вас был какой-то успех в этой проблеме? – agoldis

ответ

1

Любой, кто играет с петлевой петлей и монгодб, делает это один раз в то время. Чтобы обойти отсутствие типа ObjectId в loopback: -one way - это действительно описывать отношение, использующее свойство как внешний ключ, как обсуждалось в этом сообщении . Другим способом, намного более чистым imo является определение свойства как идентификатор в файле JSON

см model definition documentation

, например: { "myId": { "type": "string", "id": true, "generated": true } }

теперь запрос на это имущество будет работать либо с скоротать ACTUEL ObjectId или его строковое представление