如何在文件mongoosejs中搜索有徽标的文件?

时间:2013-08-03 02:25:15

标签: node.js mongodb mongoose

如果我有这个Dishes Schema,我想搜索本文档的成分,评论,类别和步骤,我该如何搜索。

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

                })

感谢您提前!

1 个答案:

答案 0 :(得分:1)

首先,在数组中搜索匹配与搜索普通字符串相同。 Mongo非常聪明,可以看到该属性是一个数组并搜索它的内容。 ...

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

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

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