2016-12-28 3 views
0

Ich versuche, ein tiefes JSON-Objekt in einem Mongo Collection-Schema zu speichern. Das Objekt hat eine interessante Form:Convert tief JSON-Objekt in Mongo-Schema

{ 
    data: { 
    a: { 
     'kjndsgheid': { foo: true, bar: false }, 
     'weidmeirfi': { foo: true, bar: false }, 
     'dfnbewetee': { foo: true, bar: false }, 
     'dbnfryhred': { foo: true, bar: false } 
    }, 
    b: 1 
    } 
} 

Das bin ich überfragt hat, weil a ist ein Objekt, dessen Schlüssel zufällig IDs - I a als Blob speichern könnte jedoch jeder Zufallsschlüssel Eigenschaften festgelegt sind, und ich möchte diese im Schema dargestellt.

Gibt es eine Möglichkeit, dies zu tun?

+0

Ist nicht Mongo schemaless? Wo definierst du das Schema? – 599644

+0

Ich definiere das Schema mit Meteor SimpleSchema. Aber ich denke nicht, dass meine Frage spezifisch ist. Mongo wird den obigen JSON-Blob nicht unabhängig von Meteor ablegen. Ich könnte mich irren - ich bin ein Neuling zu diesem Thema. – dthree

+0

OK, vielleicht solltest du diese Frage mit 'Meteor' versehen. Mongo wird sich freuen, diesen JSON für Sie zu speichern: '> db.test.find ({}) {" _id ": ObjectId (" 586441ba40561b849a48b949 ")," Daten ": {" a ": {" kjndsgeid ": {"foo": true, "bar": falsch}, "weidmeirfi": {"foo": wahr, "bar": false}, "dfnbewetee": {"foo": true, "bar": false}, "dbnfryhred": {"foo": true, "bar": falsch}}, "b": 1}} > ' – 599644

Antwort

1

Ich würde versuchen, diese, obwohl es das Schema etwas beinhaltet ändern:

ASchema = new SimpleSchema({ 
    key : { 
    type : String, 
    }, 
    foo : { 
    type: Boolean, 
    }, 
    bar : { 
    type : Boolean, 
    } 

}) 

DataSchema = new SimpleSchema({ 
    a : { 
    type : [ASchema], 
    }, 
    b : { 
    type: Number, 
    }, 

}) 

Data = new Mongo.Collection('data') 
Data.attachSchema(DataSchema) 

Einfügen Modifizieren Sie unterwegs Ihre JSON wird einbeziehen. Wenn Sie Ihren a-Schlüssel nicht validieren möchten, können Sie alternativ den Objekttyp anstelle des benutzerdefinierten ASchema verwenden.