11

MongoDB には次のようなデータがあります。

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

オブジェクトを使用して共通のデータ構造 (場所など) を整理していますが、これは Mongoose ではスキーマに適切にマッピングされる可能性があります。残念ながら、Mongoose では実際には機能しないようです。

次のように、オブジェクトを埋め込むだけの場合:

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

動作しているように見えますが、問題を引き起こす奇妙な動作を示します (たとえばinstance.location.locationlocationreturn 、およびサブオブジェクトが親スキーマからメソッドを継承します)。Mongoose リストでスレッドを開始しましたが、何のアクションも見られません。

次のようにスキーマを埋め込む場合:

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

…アプリケーションが起動しません ( SchemaMongoose でサポートされているタイプではありません)。同上

{
    name: String,
    location: Object
}

…とにかく、これは理想的ではありません。

何か不足していますか、それともスキーマが Mongoose と一致していませんか?

4

2 に答える 2

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

「単一のドキュメントを埋め込むことは問題外です。それは良い考えではありません (通常のネストされたオブジェクトを使用するだけです)」

ジョシュ

于 2011-05-31T01:17:42.160 に答える
1

これはバグだったようです。Mongoose 2.0 で修正されました。

于 2011-09-20T16:14:43.273 に答える