2012-07-05 40 views
3

我對JavaScript和Mongoose很新穎。我結束了一個奇怪的設計JSON,我想通過貓鼬堅持下去。爲我的JSON定義一個有效的mongoose模式,嵌套的文檔沒有數組?

這是本JSON的例子:

​​

A1,A2是可變的(並不總是有A1既不A2,也許還有其他人) 東西,something_else有變也,可以是不同的標識符 - 它們是屬性 - 。

也許它是我的錯設計這樣一個奇怪的JSON,但什麼是定義它的模式的最佳方式?

我有不同的選擇,既不說服我:

Schema { 
     myJSON : [] 
} 

這是非常醜陋的,但現在我可以存儲我的JSON作爲myJSON [0] = {名稱: 「theName」 ...}。 Ofc是最醜陋的,但最接近我發現我的原始數據結構。

另一個

json Schema { 
    name: String, 
    parts: [part] 
} 

part Schema { 
    name : String, 
    props : [prop] 
} 

prop Schema { 
    name : String, 
    value : Numeric 
} 

這是更漂亮,但後來我發現一些麻煩,最終的JSON將有許多陣列和間接性,我沒有對原來的一個:

{name :"a_string", parts:[{name : "a1", 
      props : [{name : "something", value: 'a_number'}]},{...}]} 

有從Schema中刪除所有這些惱人的數組的任何方式?

UPDATE:

最後,我已經解決了我的問題,因爲我能適應我的數據模型有點:

var mySchema = new Schema({ 
     name : String 
    , valid : Boolean 
    , parts : {} 
}); 

那麼「道具」包含了所有我想要的(除了名字就是把JSON外)。這不是我想到的方式,但它工作正常(我認爲)。

回答

4

看起來你正在使用貓鼬embedded documents

我不知道是否嵌入文檔將始終陣列裏面包裹。

在此之後獴文檔例如:

var Comments = new Schema({ 
    title  : String 
    , body  : String 
    , date  : Date 
}); 

var BlogPost = new Schema({ 
    author : ObjectId 
    , title  : String 
    , body  : String 
    , date  : Date 
    , comments : [Comments] 
    , meta  : { 
     votes : Number 
     , favs : Number 
    } 
}); 

一個博客帖子可以包含severals註釋和評論將被包裝內部數組(就像你的問題,如果我是對的)。

如果在模式定義中刪除該數組會發生什麼?

使用Comments,而不是[Comments]

var BlogPost = new Schema({ 
    author : ObjectId 
    , title  : String 
    , body  : String 
    , date  : Date 
    , comments : Comments 
    , meta  : { 
     votes : Number 
     , favs : Number 
    } 
}); 

我不能嘗試,現在。

否則,我有一個想法,使用mongoose virtual attributes,如果這不起作用,讓我知道。

編輯

使用虛擬屬性,你可以做這樣的事情:

BlogPost 
    .virtual('customComment') 
    .get(function() { 
     return this.comments[0]; 
    }); 

這將返回第一個註釋條目對象的內部消除陣列。

var BlogPost = mongoose.model('BlogPost'); 

BlogPost 
    .find({ title: 'foo' }) 
    .populate('comments') 
    .run(function (err, post) { 

    console.log(post.customComment); // returns the first comment without array 
}); 

未經測試,可能包含錯別字。

+0

是的,嵌入式文件必須包裝在數組:(我想我可以嘗試一些奇怪的修復使用虛擬...你能詳細說明你的想法?謝謝! – Dredok 2012-07-05 10:57:38

相關問題