10

モデルに配列またはコレクションを入れたいのですが、これはまだウォーターライン (mongoDB) で可能ですか? 代替手段はありますか?

例:

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

に:

module.exports = {

    attributes : {

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

};
4

2 に答える 2

3

これがまだ問題であるかどうかはわかりませんが、秘訣は「フォームデータ」または「x-www-url-encoded」として POST しないことです。「生の」コンテンツを投稿する必要があります。

次の状況を想定します。
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]"が (型) 検証され、失敗します。


x-www-url-encoded

この場合、ヘッダーは次のようになります。

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

form-data とまったく同じ結果になります。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"
         }]
       }
于 2013-11-14T21:18:36.987 に答える
2

モデルの関連付けを探している場合は、まだありません (提案された実装については、この問題を参照してください)。データの配列を DB に格納したいだけの場合は、配列を属性として持つことができます (リファレンスについてはドキュメントを参照してください。それ)。私はそれをテストしていませんが、一致する構造がない場合、DBに保存する前に配列をシリアル化すると思います。

于 2013-11-01T12:09:48.450 に答える