2013-08-03 3 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 будет выглядеть в одной и только одной коллекции. Вам нужно будет искать каждую коллекцию отдельно, а затем найти соответствующие записи Dish или перепроектировать вашу схему для использования вложенных документов вместо ссылок.

Смежные вопросы