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")})

...将按照您希望/期望的方式工作。

第二点,对于评论、成分、类别,您的架构设计为使用相互引用的单独集合ObjectId。Mongo 不能像关系数据库那样进行连接,所以你上面的查询永远不会匹配任何东西。任何给定的 mongo 操作都将只查看一个集合。您需要分别搜索每个集合,然后找到相应的Dish记录,或者重新设计架构以使用嵌套文档而不是引用。

于 2013-08-03T05:32:14.123 回答