Mongoose: 任意のキーを持つオブジェクトに埋め込まれたドキュメント?

作成日 2012年01月12日  ·  40コメント  ·  ソース: Automattic/mongoose

事前に定義されたキーを持たないオブジェクト内に埋め込まれたドキュメントを使用する方法はありますか? つまり、次のような状況になるのではなく、次のようになります。

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

次のようなことを言うことができます:

var myschema = new mongoose.Schema({
   field : { *: String }
});

そのようにもう少し配列になりますが、事前にキーがわからないという考えですが、それでもドキュメントを埋め込んでもらいたいと思っています。

enhancement

最も参考になるコメント

この機能は必須です。

全てのコメント40件

存在しない。

Mixedタイプはどうですか?

@ aheckmann-それは私が恐れていたものです、これがロードマップにあるのか、それともこれが広く必要とされていないものなのか知っていますか?

@ TooTallNate-そうです、それがデフォルトです。 問題は、混合すると、サポートされている(名前付きのキーと配列)埋め込みドキュメントで取得するすべての検証/スキーマのものが失われることです。

@ordrinこれまで誰もそれを必要としませんでした

OK、私がそんなに難解なことをしていることに気づかなかった! くそ。

私にはこれのユースケースがありますが、少なくともそれは適切だと思います。

ACLシステムを作っています。

私のタスクには文字列である_idsがあります。

これらのIDをメンバーのメンバーレコード(メンバーが実行できる一連のタスク)に埋め込みたいと思います。

もちろん、文字列の配列を「tasks」プロパティに入れることもできますが、理想的には、このシナリオでDBrefを使用して、メタデータを取得できるようにします。

@ordrin私はこれを読み直しました。 Mixedの使用を検討しましたか? 私はb / ciが「埋め込みドキュメント」をMongoDBがそれらを参照する方法とは異なる方法で考えると誤解したかもしれません。 通常、Mixedでできることは次のとおりです。

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

これはあなたが求めていたものにかなり近いです。 この場合、「フィールド」は任意の値に割り当てることができます。オブジェクトリテラルを割り当て、カスタムバリデーターを追加して、値が文字列であることを確認できます。

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

これに似た機能を探していたことを付け加えたかっただけです。 強く型付けされたスキーマ値を持つ動的キーが必要でした。 検証を手作業で行う必要がないようにできれば素晴らしいと思います。

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1。

この問題に関するSO投稿を投稿しました。 動的キーを使用してプロパティを検証する良い方法を誰かが知っている場合は、気軽に投稿してください。

それが組み込まれている場合、私は次のようなスキーマをレイアウトする可能性があります

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

動的キーがあると便利です。 json-schemaを作成する場合は、たとえば整数キーに一致させるなどの操作を実行できます。

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

動的キーを持っているかどうかにかかわらず、ソリューションはありますか?
2つのオブジェクトの例:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

同じ問題。 mongodbのドキュメントで説明されているような分析を行いたいです。 http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

私はこれをよく必要としていました

+1

人々の受信トレイを見ることになってしまう無意味な+1を止めてください。

理由のために「購読」と「反応」ボタンがあります。

+1

@ qqilihq 、plxを実装してから、+ 1、kthxbyeを停止します

「これまで誰もそれを必要としなかった」
5年後、+ 1トン後、まだこれに関する更新はありませんか?

これは私がこれに関連して見つけることができる最も古い問題なので、これを再度開いて#1522を閉じ、できるだけ多くの人が更新を追跡できるようにします。

この機能は必須です。

この機能がどうしてこんなに静かにリリースされたので、私は気づかなかったのですか?! 💯

@adamreisnzlolありがとう。 マングース機能のアップデートはどこで探しますか? 変更ログ? ツイッター?

通常は変更ログですが、これを見逃したに違いありません。

このページは役に立ちましたか?
0 / 5 - 0 評価