2011-05-30 64 views
11

我在MongoDB的一些數據,看起來像這樣:Mongoose是否僅支持數組中的嵌入式文檔?

{ 
    name: "Steve", 
    location: { 
     city: "Nowhere, IL", 
     country: "The United States of Awesome" 
    } 
} 

我使用對象來組織常用的數據結構(如位置),這在貓鼬會很好地映射到架構。不幸的是,他們似乎並沒有真正在Mongoose中工作。

如果我只是嵌入的對象,像這樣:

{ 
    name: String, 
    location: { 
     city: String, 
     country: String 
    } 
} 

這似乎是工作,但表現出了導致爲我如instance.location.location返回location,和子對象繼承方法從父模式問題(一些奇怪的行爲)。我在貓鼬列表上輸入started a thread,但它沒有看到任何操作。

如果我嵌入模式,就像這樣:

{ 
    name: String, 
    location: new Schema({ 
     city: String, 
     country: String 
    }) 
} 

...我的應用程序不啓動(Schema是不是貓鼬支持的類型)。同上

{ 
    name: String, 
    location: Object 
} 

......不管怎樣都不是理想的。

我錯過了什麼,或者我的模式與Mongoose不一樣嗎?

+1

查看文檔 - > http://mongoosejs.com/docs/embedded-documents.html。 – 2011-05-30 06:58:19

+1

@Andrew我有。你在向我展示什麼?我注意到它說:*「嵌入式文檔是具有自己的模式的文檔,它們是其他文檔的一部分(作爲數組中的項目)。」*這是否意味着Mongoose不支持像我這樣的模式? – s4y 2011-05-30 15:47:17

回答

1

它看起來像這樣was a bug,它被固定在Mongoose 2.0中!

3

我做了類似的事情:

var Topic = new Schema({ 
     author : ObjectId 
    , title  : String 
    , body  : String 
    , topics : [Topic] 
}); 

這在我的測試中表現很好。但是,刪除陣列機箱會導致錯誤。對我來說看起來像一個bug。

https://github.com/LearnBoost/mongoose/blob/master/lib/mongoose/schema.js#L185

傾銷的類型,我只得到字符串,數字,布爾,DocumentArray,數組,日期的ObjectId,混合 - 這似乎是故意的,模式/ index.js看起來並不像它動態註冊新的模式到類型列表,所以我猜這不是一個受支持的用例。

https://github.com/LearnBoost/mongoose/issues/188

「嵌入單一文檔是出了問題,這不是一個好主意(只要使用正規的嵌套對象)」

喬希

+0

有趣!所以它看起來像「常規嵌套對象」(我嘗試的第一件事)也有一些破壞。我只是[提出問題](https://github.com/LearnBoost/mongoose/issues/366)。 – s4y 2011-05-31 05:27:14