Mongoose是否仅支持数组中的嵌入式文档?

时间:2011-05-30 02:38:15

标签: mongodb node.js mongoose

我在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不相符?

2 个答案:

答案 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中修复了!