2013-08-03 58 views
0

如果我有這種菜餚架構,我想搜索有關這些文檔的配料,評論,類別和步驟,我該如何搜索。如何搜索文檔mongoosejs中的標籤文檔?

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

第一點,搜索數組中的匹配與搜索純字符串是一樣的。 Mongo足夠聰明地看到該屬性是一個數組並且搜索它的內容。 ...

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

...將按照您的希望/期望工作。

第二點,對於評論,成分,類別,您的架構設計有分開的集合,由ObjectId相互引用。 Mongo不能像關係數據庫那樣進行連接,因此上面的查詢永遠不會匹配任何內容。任何給定的mongo操作都將在唯一一個集合中查找。您需要分別搜索每個集合,然後找到相應的記錄,或者重新設計您的模式以使用嵌套文檔而不是引用。