我在MongoDB中有一些看起来像这样的数据:
{
name: "Steve",
location: {
city: "Nowhere, IL",
country: "The United States of Awesome"
}
}
我正在使用对象来组织公共数据结构(如位置),这些结构在Mongoose中可能很好地映射到Schemas。不幸的是,他们似乎并没有真正在Mongoose工作。
如果我只是嵌入一个对象,就像这样:
{
name: String,
location: {
city: String,
country: String
}
}
它似乎有用,但展示了一些奇怪的行为,导致我出现问题(例如instance.location.location
返回location
,子对象继承父模式的方法。我在Mongoose列表中started a thread,但它没有看到任何行动。
如果我嵌入了一个Schema,就像这样:
{
name: String,
location: new Schema({
city: String,
country: String
})
}
...我的应用程序无法启动(Schema
不是Mongoose支持的类型)。
{
name: String,
location: Object
}
......无论如何,这都不理想。
我是否遗漏了某些东西,或者我的模式与Mongoose不相符?
答案 0 :(得分:3)
我做了类似的事情:
var Topic = new Schema({
author : ObjectId
, title : String
, body : String
, topics : [Topic]
});
这在我的测试中运行良好。但是,删除阵列支架会导致错误。对我来说看起来像个错误。
https://github.com/LearnBoost/mongoose/blob/master/lib/mongoose/schema.js#L185
转储类型,我只得到String,Number,Boolean,DocumentArray,Array,Date,ObjectId,Mixed - 这似乎是故意的,schema / index.js看起来不像是动态地将新架构注册到类型列表,所以我猜这不是一个支持的用例,但是。
https://github.com/LearnBoost/mongoose/issues/188
“嵌入单个文档是不可能的。这不是一个好主意(只使用常规嵌套对象)”
约什
答案 1 :(得分:1)
它看起来像was a bug,已经在Mongoose 2.0中修复了!