Как отфильтровать коллекцию монго по значению вложенного поля? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть коллекция метеоров со следующей структурой.Это на самом деле происходит от Meteor-files коллекции ostrio.

{
 "_id" : "HsXoZ6bxkx5kMcJtm", 
"name" : "trees.jpg", 
"meta" : { "artist_id" : "QkmYdsZsMmRzqTg58" , "artist": "some name"}, 
"mime-type" : "audio/mp3", 
"userId" : "QkmYdsZsMmRzqTg58", 
"_collectionName" : "images" 
}

Я определяю публикацию

Meteor.publish('files.artist', function publishUserImages(){
   return Images.find({meta: {artist_id: this.userId}).cursor;
});

Я хочу отфильтровать по клавише meta, чтобы вернуть всепредметы с artist_id.Мой текущий фильтр будет получать только те изображения, где meta имеет точное значение {artist_id: "QkmYdsZsMmRzqTg58"}.Фильтр не вернет элемент, показанный выше, так как значение meta имеет дополнительный ключ artist

Как мне создать соответствующий фильтр?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете использовать точечную нотацию , чтобы запросить вложенное поле

Meteor.publish('files.artist', function publishUserImages(){
   return Images.find({ 'meta.artist_id': this.userId}).cursor;
});

Разница в том, что ваш запрос требует полного совпадения поддокумента, а при использовании точечной нотации вы просто проверяете одно подполеравенство.

...