如何过滤嵌套字段值的mongo集合?

时间:2019-02-09 15:15:55

标签: mongodb meteor mongodb-query

我有一个具有以下结构的流星集合。这实际上来自Meteor-files的{​​{1}}集合。

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

如何构造合适的过滤器?

1 个答案:

答案 0 :(得分:3)

您可以使用dot notation查询嵌套字段

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

区别在于您的查询需要整个子文档匹配,而使用点号表示法只是检查一个子字段是否相等。