2016-12-28 21 views
0

我想將深層JSON對象存入Mongo Collection模式。該對象有一個有趣的形狀:將深層JSON對象轉換爲Mongo模式

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

這我難住了,因爲a是一個對象,它的鍵是隨機的標識 - 我可以存儲a作爲一個blob,但是每個隨機密鑰的屬性是固定的,我想這些在模式中表示。

有沒有辦法做到這一點?

+0

是不是Mongo無模式?你在哪裏定義模式? – 599644

+0

我正在用Meteor SimpleSchema定義模式。但是我不認爲我的問題是特定於此的。不管Meteor如何,Mongo都不會提交上面的JSON blob。我可能是錯的 - 我是這個主題的新手。 – dthree

+0

好的,也許你應該用'Meteor'來標記這個問題。 Mongo將很樂意爲你儲存這個JSON: '> db.test.find({}) {「_id」:ObjectId(「586441ba40561b849a48b949」),「data」:{「a」:{「kjndsgheid」 {「foo」:true,「bar」:false},「weidmeirfi」:{「foo」:true,「bar」:false},「dfnbewetee」:{「foo」:true,「bar」:false}, 「dbnfryhred」:{「foo」:true,「bar」:false}},「b」:1}} > ' – 599644

回答

1

我想嘗試這一點,儘管它涉及稍微修改模式:

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) 

插入將涉及對修改你的JSON。或者,如果您不關心驗證您的密鑰,則可能需要使用對象類型而不是自定義的ASchema。