Mongoose ищет значение объекта в ссылочном свойстве (поддокумент)

У меня есть две схемы:

var ShelfSchema = new Schema({
    ...
    tags: [{
        type: Schema.Types.ObjectId,
        ref: 'Tag'
    }]
});

var TagSchema = new Schema({
    name: {
        type: String,
        unique: true,
        required: true
    }
});

Я хотел бы найти все полки, где массив tags имеет тег с определенным значением.

Я пробовал использовать:

modelShelf.find({tags 'tags.name': 'mytag'})...

Но это не работает. Он всегда возвращает пустой массив. Есть идеи? Глядя на db, каждый экземпляр Shelf связывает только objectID тегов. Я использовал ссылки, потому что мне нужно работать также с объектами тегов.


person danielemm    schedule 25.06.2016    source источник


Ответы (1)


В mongoDB вы, по сути, не можете сделать это напрямую, поскольку запросы нацелены на одну коллекцию за раз. Недавно были добавлены новые функции, которые позволяют какое-то соединение при использовании фреймворка агрегации, но для ваших нужд это не обязательно.
Из ваших схем я вижу, что имена тегов уникальны поэтому вы можете сначала получить нужный тег с помощью чего-то вроде

modelTag.find({name: 'mytag'})

чтобы получить идентификатор тега, а затем запросить этот идентификатор тега в коллекции полки

modelShelf.find({tags: tagId})
person DAXaholic    schedule 25.06.2016