34

私の Mongoose スキーマには、文字列のフィールドがあり、JSON オブジェクトを格納できるようにしたいと考えています。出来ますか?Postgres では、辞書を文字列列に格納できます。

ディクショナリ (実際には JS の JSON オブジェクト) は単純な読み取りと書き込みの値であり、クエリを必要としないだけでなく、値の配列ではなく 1 つの値であるため、これを行いたいと考えています。

4

5 に答える 5

113

はい、保管できます{myJsonProperty: JSON.stringify(myObject)}{myJsonProperty: Object}マングース スキーマを設定するだけで、理由もなくオブジェクト全体を文字列に変換せずに保存できることを知っていることを願っています。スキーマを持つネストされたドキュメントである必要はありません。単純な javascript オブジェクトにすることができます。

于 2013-07-05T23:55:35.983 に答える
18

フィールドフォームのタイプを「String」から「Object」に変更できる場合は、jsonをそのまま保存できます。

var schema_obj = new Schema({
field1: Object,
..
});
于 2016-04-20T16:48:35.510 に答える
13

受け入れられた答えは、ほとんどの状況に適しています。

ただし、格納したいオブジェクトがあり、オブジェクト キーを制御できない場合 (たとえば、ユーザーが送信したものなど)、これらを文字列化された JSON として格納することを検討してください。これにより、キーに予約文字 $または..

これは、Mongoose のゲッターとセッターを使用して実現できます。次に例を示します。

data: {
  type: String,
  get: function(data) {
    try { 
      return JSON.parse(data);
    } catch(error) { 
      return data;
    }
  },
  set: function(data) {
    return JSON.stringify(data);
  }
}
于 2016-02-08T14:40:14.807 に答える
6

stack-overflow の変更制限が 6 であるため、オリジナルを変更できませんでした。再投稿された素晴らしい仕事 Tom は、catch ブロックに catch(err) がありませんでした

data: {
  type: String,
  get: function(data) {
    try { 
      return JSON.parse(data);
    } catch(err) { 
      return data;
    }
  },
  set: function(data) {
    return JSON.stringify(data);
  }
}
于 2018-06-29T20:48:50.117 に答える