Возможно ли в Sailsjs построить более сложные модели

Я хотел бы иметь массивы или коллекции в моей модели, возможно ли это с помощью ватерлинии (mongoDB)? есть ли альтернативы вокруг?

Пример:

{
   name: Bundle,
   col1 : {
      name : anOtherModel,
      subCol: {
         text: aString,
         ...
      }
   },
   col2 : {
      name : anOtherModel,
      subCol: {
         text: aString,
         ...
      }
   }
}

to:

module.exports = {

    attributes : {

        name : {
            type : 'STRING',
            required : true
        },
        basicModules: {
            type : 'ARRAY', // or 'COLLECTION'
            required : false
        }
    }

};

Ответ 1

Я не знаю, если это все еще проблема, но трюк заключается в том, что ни POST, ни "форма-данные", ни "x-www-url-encoded". Вы должны отправить "сырое" содержимое:

Предположим, что ситуация:
http://www.example.com/mymodel


форма-данные

Заголовок может выглядеть следующим образом:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="basicModules"

[1,2,3,4]
----WebKitFormBoundaryE19zNvXGzXaLvS5C

результат состоит в том, что строка "[1,2,3,4]" получает (type-) проверку, которая не работает


х-WWW-URL-закодирован

В этом случае заголовок выглядит примерно так:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

basicModules=%5B1%2C2%2C3%2C4%5D

который имеет точно такой же результат, как и данные формы. проверка не выполняется из-за того, что basicModules является строкой "[1,2,3,4]"


сырец

чтобы заставить его работать, заголовок должен выглядеть следующим образом:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

{"basicModules":[1,2,3,4]}

который приводит именно к тому, что вы хотите, и работает проверка типа.


поэтому, в конце концов, вы можете заполнить самые сложные модели таким образом в JSON. например.

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

{"user": {
         "name": {
           "first":"John",
           "last":"Doe"
         },
         "age":25,
         "pets":[{
           "name":"Garfield",
           "type":"cat"
         },
         {
           "name":"Rudolph",
           "type":"reindeer"
         }]
       }

Ответ 2

Если вы ищете ассоциации моделей, она еще не существует (посмотрите эту проблему для предлагаемых реализаций), если вам просто нравится чтобы иметь массивы данных, хранящихся в БД, у вас могут быть массивы как атрибуты (см. документ для справки об этом). Я не тестировал его, но я предполагаю, что он будет сериализовать массив до его сохранения в БД, если он не имеет соответствующей структуры.