0

このディッシュ スキーマがあり、このドキュメントの成分、コメント、カテゴリ、および手順を検索したい場合、どのように検索すればよいですか。

var DishesSchema = new Schema({
    created_at: {
        type: Date,
        default: Date.now
    },
    created_by: {
        type: Schema.ObjectId,
        ref: "User"
    },
    title: String,
    description: String,
    comments: [{ type: Schema.ObjectId, ref: 'Comment' }],
    body: String,
    picture: [String],
    main_picture: String,
    likes: [{
        type: Schema.ObjectId,
        ref: "User"
    }],
    ingredients: [{ type: Schema.ObjectId, ref: 'Ingredient' }],
    categories: [{ type: Schema.ObjectId, ref: 'Category' }],
    steps: [String]
});

成分、コメント、カテゴリを検索する方法を見つけるが、手順を検索する方法

Dishes.find().or([
                    { 'ingredients.name': new RegExp(name, "i") },
                    { description: new RegExp(name, "i") },
                    { body: new RegExp(name, "i") },
                    {},
                ]).limit(10).exec(function (err, docs) {
                    if (err){
                        response.json('error', err)
                    }
                    else{
                        response.json('info', docs)
                    }

                })

よろしくお願いします!

4

1 に答える 1

1

最初のポイントは、配列内で一致を検索することは、プレーンな文字列を検索することと同じです。Mongo は、プロパティが配列であることを確認し、その内容を検索するほどスマートです。...

Dishes.find({steps: new RegExp(name, "i")})

...期待/期待どおりに機能します。

2 番目のポイントは、コメント、成分、カテゴリの場合、スキーマは によって相互参照される個別のコレクションで設計されていることObjectIdです。Mongo はリレーショナル データベースのような結合を行うことができないため、上記のクエリは何にも一致しません。特定の mongo 操作は、1 つのコレクションのみを検索します。各コレクションを個別に検索して対応するDishレコードを見つけるか、参照の代わりにネストされたドキュメントを使用するようにスキーマを再設計する必要があります。

于 2013-08-03T05:32:14.123 に答える