埋め込みドキュメントの配列を持つモデルがあります。これは、(ほとんどの場合) ルート ドキュメントと埋め込みドキュメントを一緒にクエリすることが多いため、設計によって作成されました。
var SubsetSchema = new mongoose.Schema({
number: {
type: Number,
index: true,
unique: true,
},
name: String,
});
var RootSchema = new mongoose.Schema({
name: String,
subsets: [SubsetSchema],
});
mongoose.model('collection', RootSchema);
var Root = module.exports = mongoose.model('collection');
また、単一のサブセット ドキュメントを見つけることは、次を使用しても問題ありません。
Root.findOne({'subsets.number': 3}, {_id: 0, 'subsets.$': 1}, ...);
ただし、複数のサブセットドキュメントを検索する必要がある場合 (およびこの場合は正規表現を使用する場合) は不可能のようです:
Root.find({'subsets.name': /regex/i}, {_id: 0, 'subsets.$': 1}, ...);
次のエラーが発生します。
error: {
"$err" : "positional operator (subsets.$) requires corresponding field in query specifier",
"code" : 16352
}
この場合、どうすればよいでしょうか?スキーマを 2 つのコレクションに分割することは選択肢ではありません。これは、他のより頻繁なクエリでのパフォーマンスが損なわれるためです。